这是我添加到软件中的新查看菜单:
我的编辑器(CDialog
)有两种模式。此查看菜单仅适用于其中一种模式。
目前我正在禁用这样的菜单项:
CMenu* pMenu = GetMenu();
if (pMenu != nullptr)
{
pMenu->EnableMenuItem(ID_VIEW_REFRESH, MF_BYCOMMAND | MF_GRAYED);
CMenu* pViewMenu = pMenu->GetSubMenu(3);
if (pViewMenu != nullptr)
pViewMenu->EnableMenuItem(1, MF_BYPOSITION | MF_GRAYED);
}
这很好用。但有没有办法:
- 禁用菜单栏上的实际查看菜单项?
- 根据需要删除/添加菜单?
目前,菜单始终存在,我只是禁用依赖于事件编辑器模式的项目。它是我的资源中编辑器菜单的一部分:
POPUP "View"
BEGIN
MENUITEM "Refresh\tF5", ID_VIEW_REFRESH, INACTIVE
POPUP "Zoom", GRAYED
BEGIN
MENUITEM "Zoom In\tCTRL +", ID_ZOOMLEVEL_ZOOMIN
MENUITEM "Zoom Out\tCTRL -", ID_ZOOMLEVEL_ZOOMOUT
MENUITEM SEPARATOR
MENUITEM "400%", ID_ZOOMLEVEL_400
MENUITEM "300%", ID_ZOOMLEVEL_300
MENUITEM "250%", ID_ZOOMLEVEL_250
MENUITEM "200%", ID_ZOOMLEVEL_200
MENUITEM "175%", ID_ZOOMLEVEL_175
MENUITEM "150%", ID_ZOOMLEVEL_150
MENUITEM "125%", ID_ZOOMLEVEL_125
MENUITEM "100%\tCTRL + 0", ID_ZOOMLEVEL_100
MENUITEM "75%", ID_ZOOMLEVEL_75
MENUITEM "50%", ID_ZOOMLEVEL_50
MENUITEM SEPARATOR
MENUITEM "Custom...", ID_ZOOM_CUSTOM
END
END
这可能吗?
最佳答案
假设您的菜单名为 IDR_MAINFRAME
:
创建您的mainFrame
并添加IDR_MAINFRAME
菜单:
CMainFrame* pFrame = new CMainFrame;
pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL);
您必须获得如下所示的主菜单:
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
现在,您可以禁用特定项目:
menu.EnableMenuItem (1, MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
pFrame->SetMenu(&menu);
查看下面的结果:
请注意,Edition
是我的应用程序的主菜单(类似于“ View ”菜单)。
要动态启用菜单(View menu
),请再次调用 EnableMenuItem
,如下所示:
menu.EnableMenuItem (1, MF_BYPOSITION);
希望对你有帮助。
更新
我还必须使用此代码来使菜单栏以视觉方式更新:
DrawMenuBar();
使用此代码,直到将鼠标放在菜单文本上时,菜单才会在视觉上更新。
关于c++ - 我可以禁用菜单栏上的菜单项和/或动态显示它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60789339/