Problems with CMenu::ModifyMenu

Problems with CMenu::ModifyMenu

本文关键字:ModifyMenu CMenu with Problems      更新时间:2023-10-16

我在CFrameWnd派生类的OnCreate方法中使用CMenu::ModifyMenu来更改菜单上的标题以匹配用户语言。

我使用的是VC++设计器,菜单是在.rc文件中声明的。

对于MENUITEM元素,我使用它如下:

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

对于POPUP元素(没有ID(,我使用它如下:

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

它可以按预期更改标题,但对于在我更改标题时初始禁用的菜单项,它们会被启用。我该如何解决这个问题?

在调用ModifyMenu后,您可能必须显式禁用菜单项并设置工具提示文本。使用ModifyMenu将有效地销毁以前的菜单项并创建新的菜单项。您正在丢失资源文件中的任何设置和初始化,或者您在上一个项目或菜单上的其他设置和初始化。

参见备注:http://msdn.microsoft.com/en-us/library/4tbfebs6(v=vs.80(.aspx

对于这样的场景,最好使用EnableMenuItem函数,如下所示m_wndMenu->EnableMenuItem(ID_APP_EXIT,MF_BYCOMMAND|MF_ENABLED(;

这将起作用。。。