我正在使用 Windows API 用 C 语言开发多语言 Win32 程序。它将允许用户选择界面的语言。根据MSDN documentation , 我需要使用 FindResourceEx()
+ LoadResource()
并且不是不可靠的SetThreadLocale()
.
我的问题是:我不知道如何从资源中加载菜单。
考虑到下面的示例代码,应该如何修改它来加载和更新菜单?
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);
最佳答案
命令中建议的替代解决方案(每种语言的单独 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);
关于c - 如何使用 `FindResourceEx()` 和 `LoadResource()` 加载新菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41624655/