我正在使用Windows API在C中开发多语言Win32程序。它将允许用户选择界面的语言。根据{{3}},我需要使用MSDN documentation + FindResourceEx()
和不不可靠的LoadResource()
。
我的问题是:我不知道如何从资源中加载菜单。
考虑下面的示例代码,如何修改以加载和更新菜单?
HMENU hMenu = GetMenu(hWnd);
SetMenu(hWnd, NULL);
DestroyMenu(hMenu);
HRSRC rcMenu = FindResourceEx(NULL, RT_MENU, MAKEINTRESOURCE(IDM_MENU),
MAKELANGID(LANG_AFRIKAANS, SUBLANG_AFRIKAANS_SOUTH_AFRICA));
hMenu = LoadResource(NULL, rcMenu); /* ??? HGLOBAL used as a HANDLE? */
SetMenu(hWnd, hMenu);
答案 0 :(得分:3)
命令中建议的替代解决方案(每种语言单独的DLL资源文件)是一个很好的选择,我们自己使用。但是要回答你的问题:
LoadMenuIndirect()
功能允许您从资源模板创建菜单(用户对象)。它是从资源加载的模板。
例如(无错误检查),
HRSRC hRes = FindResourceEx(NULL, RT_MENU, MAKEINTRESOURCE(IDM_MENU),
MAKELANGID(LANG_AFRIKAANS, SUBLANG_AFRIKAANS_SOUTH_AFRICA));
HGLOBAL hGlob = LoadResource(NULL, hRes);
LPVOID pData = LockResource(hGlob);
// create the menu
HMENU hMenu = LoadMenuIndirect((MENUTEMPLATE*)pData);