1生成复选标记菜单项
第一步:获取Menu
第二步:获取所在子菜单
第三步:对相应的菜单项加标记
如下:在框架类的构造函数里面写如下代码:
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);
2设置缺省菜单项(菜单成黑体加粗,且只能有一个):
第一步:获取Menu
第二步:获取所在子菜单
第三步:对相应的菜单项进行缺省操作
如下:在框架类的构造函数里面写如下代码:
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);//True表示按“位置索引”//此时一定要注意(分割栏也占一个位置)
或者GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,FALSE);//False表示按ID表示索引
3图像标记菜单项
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);
结果没有显示出图形,原因是图像太大!先获取系统的信息GetSystemMetrics获取系统度量(获取默认图像标记的宽和高)
GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK);
4将菜单设置不能使用 (比较特殊)
GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED);
仅仅使用此函数是不行的,还需要在CMainFram类中加入一成员变量m_bAutoMenuEnable=FALSE;才成功。
将上述不能使用的菜单项设置成灰色状态。
5将菜单加载和取消操作CWnd::SetMenu()函数
SetMenu(NULL);
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
此时可以看到,此时的菜单是局部对象,会出现异常。此时进行动态生成
SetMenu(NULL);
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu;
menu.Detach();//此时临时变量并不在其生命周期结束时析构,而是在窗体析构时析构。
6类CCmdUI:主要是让设置菜单项可用不可。(让新建菜单项不可用,此时成灰色状态)
让ID_FILE_NEW响应UPDATE_COMMAND_UI()
void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI)
{
pCmdUI->Enable(FALSE);
}
结果是:菜单项“新建”成灰色且不可用;
7如何让工具栏图标和菜单项关联起来:让他们用相同的ID就可以。
8:右键弹出菜单
VC6.0以及有集成的组件。project->add to project->components and controls
响应右键单击消息。
在OnRButtonDown()中实现;
首先要转换鼠标在客户区点击点的位置到系统桌面的位置
void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pPopup=menu.GetSubMenu(0);
ClientToScreen(&point);//
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);
CView::OnRButtonDown(nFlags, point);
}