Re: CommandBar_GetMenu
От: peter__pan Украина  
Дата: 19.11.09 12:36
Оценка: 6 (1)
Здравствуйте, 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.