我正在编写一个程序,除其他外,需要右键单击显示上下文菜单。我正在陷入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的资源视图中,对话框包含在Dialog文件夹中,而它包含在Menu文件夹中(明智的),但我不确定是否会产生什么差异。
为什么我会得到这个错误?为什么找不到IDR_NED_MENU?
我正在使用Visual Studio 2010,这不是一个MFC项目。我不确定我应该包括什么(如果有的话)其他相关细节;让我知道在评论中,我会编辑更新。
谢谢。