WinAPI函數LoadMenu的第一個參數是要從中加載菜單的模塊的HINSTANCE。如果您的應用程序資源在可執行文件(而不是單獨的資源DLL),您可以通過調用GetModuleHandle(NULL)
得到它的實例:
menu.Attach(LoadMenu(GetModuleHandle(NULL),MAKEINTRESOURCE(<Menubar ID>)));
在其他情況下,你需要的模塊名稱傳遞給函數。
順便說一句,加載菜單更簡單的方法是:
CMenu menu;
menu.LoadMenu(MAKEINTRESOURCE(<ID>));
這裏是它是如何在atluser.h實施:
BOOL LoadMenu(ATL::_U_STRINGorID menu)
{
ATLASSERT(m_hMenu == NULL);
m_hMenu = ::LoadMenu(ModuleHelper::GetResourceInstance(), menu.m_lpstr);
return (m_hMenu != NULL) ? TRUE : FALSE;
}
所以,你可以使用ModuleHelper
的事情,而不是的_Module
。它來自atlapp.h:
inline HINSTANCE GetResourceInstance()
{
#if (_ATL_VER >= 0x0700)
return ATL::_AtlBaseModule.GetResourceInstance();
#else // !(_ATL_VER >= 0x0700)
return ATL::_pModule->GetResourceInstance();
#endif // !(_ATL_VER >= 0x0700)
}
ATL::_AtlBaseModule.GetResourceInstance
函數返回在ATL編譯(如果我沒有記錯)模塊句柄。