关键函数为ModifyMenu()
void CMenuTestDlg::OnOptionTest()
CMenu* pMenu;
CString str;
static bool bStatus = false;
bStatus = !bStatus;
pMenu = GetMenu()->GetSubMenu(1);
if (bStatus)
str.Format(_T("选中"));
str.Format(_T("未选中"));
pMenu->ModifyMenu(0, MF_BYPOSITION | MF_STRING, ID_OPTION_TEST, str);
这边再分享两个自己写的使能和禁用菜单栏的函数。
void CMenuTestDlg::MenuOptionEnable(UINT MenuID)
GetMenu()->EnableMenuItem(MenuID, MF_BYCOMMAND | MF_ENABLED );
void CMenuTestDlg::MenuOptionDisable(UINT MenuID)
GetMenu()->EnableMenuItem(MenuID, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
用鼠标点击菜单按钮弹出主菜单,选择子菜单时图标符号由感叹号实时改为打钩图标。选中的子菜单序号保存在windows目录下的应用程序名称.ini文件中,下次运行程序时出现的是最后一次选择的打钩图标子菜单。
BOOL LoadMenu(UINT nIDResource);
加载菜单资源,并将其附加到CMenu对象上。参数nIDResource指定了要加载的菜单资源的ID。如果菜单加载成功则返回TRUE,否则返回FALSE。
这个篇文章说的很好,但是有个地方折腾了好久了
m_menu = GetMenu()->GetSubMenu(1);需要在初始化界面的地方获取指针,然后后面使用,否则总是抛出异常;
SetMenuItemBitmaps//设置菜单项左边的位图
函数定义:BOOL SetMenuItemBitmaps( UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked );
nPostion
在对话框窗口里显示菜单栏
像工具栏一样,菜单栏在按件面板里没有对应的选项,但有一个菜单控件类CMenu,所以如果想要在对话框里显示菜单栏,就得像工具栏那样,
一、将Menu加入Resource视图中
在WorkSpace中的Resource视图下,在任意一个文件夹图标上,右击选择Insert(插入)选项,在弹出的对话框中选择Menu以后,再点击,new按钮,菜单就会添加成功了,但是现在还没有完成,还不能进行编译,因为现在的菜单时空的,在编译的时候会被清除的。
二、用菜单编辑器添...
新加一个选项text,右键选择添加事件,选择command命令,选择view类,编辑代码就可以了
2.子菜单勾选
//GetMenu()->GetSubMenu(0)->CheckMenuItem(2,MF_BYPOSITION | MF_CHECKED);0,2代表第一个菜单项下第三个选项设置为对勾
//GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMA
我正在编写一个程序,除其他外,需要右键单击显示上下文菜单。我正在陷入WM_NOTIFY,被点击的控件的标识符,以及NM_RCLICK。这一切都很好。问题出现在我正在处理该右键单击时:case NM_RCLICK:{HMENU Popup = LoadMenu(0, MAKEINTRESOURCE(IDR_NED_MENU));if ( !Popup ) {DWORD err = GetLastEr...