2011-06-10 68 views
0

我正在編寫一個程序,除其他事項外,需要右鍵單擊顯示上下文菜單。我正在捕獲WM_NOTIFY,被點擊的控件的標識符,以及NM_RCLICK。這一切都很好。Windows LoadMenu錯誤:「在圖像文件中找不到指定的資源名稱。」

問題是當我處理的是右鍵單擊:

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,而我已經包含了相應的.rc.h文件在此.cpp文件。包含在同一個.rc文件中的實際對話窗口ID完美地工作。此代碼從另一個項目中進一步複製並粘貼,其中LoadMenu調用完美:我從頭開始重新創建IDR_NED_MENU,但ID有些不同(但它們在.rc文件和.cpp文件之間具有代碼我粘貼在這裏的片段);最初我不小心創建了一個單獨的.rc文件的菜單,所以我試圖在這裏糾正這一點。我注意到,在Visual Studio的資源視圖中,對話框包含在Dialog文件夾中,而它包含在Menu文件夾中(明智的),但我不確定是否會產生什麼差異。

爲什麼我會得到這個錯誤?爲什麼找不到IDR_NED_MENU

我正在使用Visual Studio 2010,這不是一個MFC項目。我不確定我應該包括什麼(如果有的話)其他相關細節;讓我知道在評論中,我會編輯更新。

謝謝。

回答

1

LoadMenu的第一個參數必須是資源所在的可執行映像的句柄。該句柄是您在WinMain中獲得的第一個HINSTANCE。或者,您可以撥打電話GetModuleHandle(0)獲取。

+0

人。在這個項目中,我複製了這段代碼,它肯定使用了'LoadMenu(0,MAKEINTRESOURCE(IDR_MENU1));'('IDR_MENU1'是舊的ID),並且工作正常。我嘗試了'LoadMenu(GetModuleHandle(0),MAKEINTRESOURCE(IDR_NED_MENU));'不過,現在我仍然得到一個'NULL'返回值,'GetLastError'現在給出一個錯誤消息, null)'... – KRyan 2011-06-10 16:13:49

+0

啊哈,但是這確實讓我想到了答案:因爲我正在修改一個項目,所以我沒有完全自己編寫,有一個調用CreateDialogParam'我沒有寫,並且工作:它爲第一個參數使用了一個名爲'hModule'的全局'HINSTANCE'變量,並將其用於'LoadMenu'調用!就像ybungalobill建議的一樣,'hModule'最初在'DllMain'中定義爲等於'hDllHandle'。謝謝! – KRyan 2011-06-10 16:21:26

+0

@DragoonWraith:啊,如果它是一個DLL項目,那是另一回事,你必須在OP中說。每個由您的應用程序加載的DLL都可能擁有自己的具有相同ID的資源,因此您必須指定要使用的DLL的HINSTANCE。 – ybungalobill 2011-06-10 16:56:19

相關問題