Здравствуйте, Faust, Вы писали:
F>пытаюсь изменить строковое описание пункта меню следующим образом:
F>F>//HMENU hMenu = CommandBar_GetMenu(hwndCB, 0);
F>HMENU hMenu = SendMessage(hwndCB, SHCMBM_GETMENU, 0, 0);
F>HMENU hSubMenu = GetSubMenu(hMenu, 0);
F>TCHAR szItemName[128] = { 0 };
F>MENUITEMINFO mii = { 0 };
F>mii.cbSize = sizeof(MENUITEMINFO);
F>mii.fMask = MIIM_TYPE;
F>mii.fType = MFT_STRING;
F>mii.dwTypeData = szItemName;
F>mii.cch = 128;
F>GetMenuItemInfo(hMenu, IDM_BLABLABLA, FALSE, &mii);
F>wcscpy(szItemName, L"bla-bla-bla");
F>mii.cch = wcslen(szItemName);
F>SetMenuItemInfo(hMenu, IDM_BLABLABLA, FALSE, &mii);
F>
F>на эмуляторе все работает, на устройстве hMenu равен NULL...
F>помогите плиз!
Изминения нужно делать в обработчике сообщения WM_INITMENUPOPUP, также в нём можно енеблить/дисеблить пункты и ставить чексы.
Пример:
LRESULT SettingsForm::OnInitMenuPopup(HMENU p_hMenuPopup, UINT p_nIndex, BOOL p_bSysMenu)
{
if (m_bTranslateMenu)
{
// Localization Menu
MENUITEMINFO oMenuInfo = {0, };
oMenuInfo.cbSize = sizeof(MENUITEMINFO);
oMenuInfo.fMask = MIIM_TYPE;
oMenuInfo.fType = MFT_STRING;
oMenuInfo.dwTypeData = (LPWSTR) LNGSTR(L"MENU_EXIT");
oMenuInfo.cch = wcslen(LNGSTR(L"MENU_EXIT"));
::SetMenuItemInfo(p_hMenuPopup, IDM_SETTINGSMENU_EXIT, FALSE, &oMenuInfo);
oMenuInfo.dwTypeData = (LPWSTR) LNGSTR(L"MENU_ABOUT");
oMenuInfo.cch = wcslen(LNGSTR(L"MENU_ABOUT"));
::SetMenuItemInfo(p_hMenuPopup, IDM_SETTINGSMENU_ABOUT, FALSE, &oMenuInfo);
m_bTranslateMenu = false;
}
return 0;
}