如何使用`FindResourceEx()`和`LoadResource()`来加载新菜单?

时间:2017-01-12 23:06:03

标签: c windows winapi

我正在使用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);

1 个答案:

答案 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);