一、标记菜单项
调用CheckMenuItem函数。//通过菜单项索引访问菜单项 GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED); //也可以通过菜单项ID来访问菜单项 //GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);二、图形标记菜单项 设置图形标记用SetMenuItemBitmaps函数。
static CBitmap bitmap;//定义为成员变量或静态变量,否则OnCreate函数结束后导致 //对象被析构,其对应资源被销毁,无法显示图形. bitmap.LoadBitmapW(IDB_BITMAP1); GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(1,MF_BYPOSITION,&bitmap,&bitmap);
可以使用GetSystemMetrics函数获取菜单项标记图形的默认宽度和高度,参数为SM_CXMENUCHECK或SM_CYMENUCHECK分别表示获得菜单项标记图形的宽度和高度.
CString str; str.Format(L"cx=%d,cy=%d",GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK)); MessageBox(str);三、默认菜单项 默认菜单项以粗体显示。一个子菜单只能有一个默认菜单项。
GetMenu()->GetSubMenu(0)->SetDefaultItem(2,TRUE);//设置默认菜单项四、禁用菜单项 默认情况下,所有菜单项的更新都是由MFC的命令更新机制完成的,如果想自己更改菜单项的状态,就必须先把CMainFrame类的成员变量m_bAutoMenuEnable设置为FALSE,一般在CMainFrame类的构造函数中进行,这样就不需要对ON_UPDATE_COMMAND_UI或ON_COMMAND消息进行响应处理,不再利用它的菜单命令更新机制去判断哪个菜单可以使用,哪个菜单不能使用了,CMenu类的EnableMenuItem成员函数将能够正常工作.
GetMenu()->GetSubMenu(0)->EnableMenuItem(3,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);五、移除和装载菜单 在设置窗口菜单时,如果定义的是局部菜单对象,则一定要在调用SetMenu函数设置窗口菜单之后,立即调用菜单对象的Detach函数将菜单句柄与菜单对象分离.
SetMenu(NULL);//移除菜单 CMenu menu; menu.LoadMenuW(IDR_MAINFRAME); SetMenu(&menu);//重新装载菜单 menu.Detach();//将菜单对象与菜单句柄分离,这样当menu这个局部变量被析构时 //其对应的菜单资源不会被销毁。
QQ:373078188" src="/Upload/Images/2015012911/FD0785AC4EE76C70.png" alt="基本菜单操作 - 逆天笨笨蛋 - QQ:373078188" />
菜单项标记 菜单项图形标记 禁用菜单项 默认菜单项