Проблемы с CMenu :: ModifyMenu - PullRequest
0 голосов
/ 26 июля 2011

Я использую CMenu :: ModifyMenu в методе OnCreate моего производного класса CFrameWnd , чтобы изменить заголовки в моем меню в соответствии с языком пользователя .

Я использую конструктор VC ++, и меню объявлено в файле .rc.

Для элементов MENUITEM я использую его следующим образом:

m_wndMenu->ModifyMenu(ID_APP_EXIT, MF_BYCOMMAND, NULL, CString((LPWSTR) ID_APP_EXIT));

Для элементов POPUP (у которых нет идентификатора) я использую его следующим образом:

m_wndMenu->ModifyMenu(0, MF_BYPOSITION | MF_STRING, NULL, CString((LPWSTR) ID_MENU_POPUP_FILE));

Работает, как и ожидалось, для изменения заголовков, но для пунктов меню, которые изначально отключены, когда я изменяю заголовок, они включаются. Как мне это исправить?

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Возможно, вам придется явно отключить пункт меню и установить текст всплывающей подсказки после вызова ModifyMenu.Использование ModifyMenu эффективно уничтожит предыдущий пункт меню и создаст новый.Вы теряете любые настройки и инициализацию из файла ресурсов или иным образом, которые вы имели в предыдущем пункте или меню.

0 голосов
/ 13 марта 2012

для такого сценария лучше использовать функцию EnableMenuItem, например, m_wndMenu-> EnableMenuItem (ID_APP_EXIT, MF_BYCOMMAND | MF_ENABLED);

это будет работать ...

...