窗口加载菜单错误: "The specified resource name cannot be found in the image file."

Windows LoadMenu error: "The specified resource name cannot be found in the image file."

本文关键字:found cannot be in file image the name resource 菜单 加载      更新时间:2023-10-16

我正在编写一个程序,除其他外,该程序需要在右键单击时显示上下文菜单。我正在捕获WM_NOTIFY,正在单击的控件的标识符,然后NM_RCLICK.这一切都很好用。

当我处理右键单击时出现问题:

case NM_RCLICK:
{
    HMENU Popup = LoadMenu(0, MAKEINTRESOURCE(IDR_NED_MENU));
    if ( !Popup ) {
        DWORD err = GetLastError();
        char* buf;
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER, 0, err, 0, buf, 1<<19, 0);
        _ERROR("LoadMenu(0, MAKEINTRESOURCE(IDR_NED_MENU)); Error '%s' thrown; no menu loaded.", buf);
        delete [] buf;
    }
    Popup = GetSubMenu(Popup, 0);
    CheckMenuItem(Popup, 1, MF_CHECKED|MF_BYPOSITION);
    POINT Point;
    GetCursorPos(&Point);
    switch (TrackPopupMenu(Popup, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, Point.x, Point.y, 0, GetActiveWindow(), NULL)) {
        // ...

首先,LoadMenu(0, MAKEINTRESOURCE(IDR_NED_MENU));返回NULL,并且我收到一条错误消息,指出"在图像文件中找不到指定的资源名称"。

现在,IDR_NED_MENU是我在.rc文件中拥有的菜单的 ID,并且我已在此.cpp文件中包含了相应的.rc.h文件。同一.rc文件中包含的实际对话框窗口 ID 可以完美运行。此代码是从另一个项目中进一步复制和粘贴的,其中 LoadMenu 调用运行良好:不过,我确实从头开始重新创建了IDR_NED_MENU,并且 ID 有些不同(但它们确实在.rc文件和具有我粘贴在此处的代码片段的.cpp文件之间匹配(;最初我不小心在一个单独的.rc文件中创建了菜单,所以我试图在这里纠正它。我注意到在Visual Studio的资源视图中,对话框包含在对话框文件夹中,而这包含在菜单文件夹中(明智(,但我不确定这有什么区别(如果有的话(。

为什么会出现此错误?为什么找不到IDR_NED_MENU

我使用的是Visual Studio 2010,这不是MFC项目。我不确定我应该包括哪些其他相关细节(如果有的话(;在评论中告诉我,我会编辑更新。

谢谢。

LoadMenu的第一个参数必须是资源所在的可执行映像的句柄。句柄是您在WinMain中获得的第一个HINSTANCE。或者,您可以通过调用 GetModuleHandle(0) 来获取它。