静态菜单

静态菜单:
1.菜单相应的顺序:
先是CMenuview对菜单进行相应,接下来是CMenuDoc(文档类),然后是CMenuFrame(框架类),最后是CMenuApp(应用程序类)




2.在在菜单项上打上“√”:
在"CMainFrame::OnCreate"中写代码:
//在“文件”->“新建”菜单项打上标记
//方法一:
//用索引去访问
// 这个GetMenu是CWnd的成员函数,可以直接调用,它返回的是整个菜单栏的指针
//GetSubMenu访问子菜单,访问“新建”用索引“0”
//按照索引去访问,新建索引是“0”
    GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);
    
    //方法二:
//用菜单项的ID号去访问
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYPOSITION | MF_CHECKED);


3.创建一个缺损菜单项:
(使菜单项以粗体的形式显示:)

//将“打开”作为缺损菜单项,它的索引是“1”,子菜单“文件为“0”
    //如果SetDefaultItem第二个参数为FALSE,那么第一个参数要用命令的ID
    //这里用的是索引,所以将第二个参数设为TRUE.
//方法一:
//用索引号:
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);

//方法二:
//用ID号:
GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,FALSE);
//注意:对于一个缺损菜单来说,一个子菜单中只能有一个菜单项是缺损菜单。




4.图形标记菜单的创建:
//获取位图的大小尺寸:
//Format这个函数可以按照一定的格式将这个内容格式化到CString对象当中
//CString提供Format这个成员函数,按照一定的内容格式化,格式化到CString
//这个对象当中,利用GetSystemMetrics传递一个参数
CString str;
str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));
MessageBox(str);//将高度和宽度显示出来
   // CBitmap bitmap;//将bitmap这个对象作为CMainFrame的成员函数
//将CBitmap bitmap;剪切,放到MainFrame.h当中private: CBitmap m_bitmap
m_bitmap.LoadBitmap(IDB_BITMAP1);
//首先获取到指向菜单栏的指针,用GetSubMenu去获取子菜单
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);




5.让菜单项不能使用的操作:(并让菜单项变灰色)
在CMainFrame中写一行代码:m_bAutoMenuEnable=FALSE;
在OnCreate中写:
 GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);


注意:一开始在“编辑”子菜单中的“撤销”、“剪切”、“复制”、“粘贴”都是变灰的,呈不可用的状态,但是,我们把这个m_bAutoMenuEnable变量设置为FALSE,这时候,MFC就不会用它的命令更新的机制去判断哪一个菜单项可以使用,哪一个菜单项不能使用,那么这个所以的操作都需要我们自己去完成。


6.让子菜单中“编辑”的子菜单项“剪切变得可以使用”
void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable();
}


7.让“新建”变得不能使用:
void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
   //方法一
// if (ID_FILE_NEW==pCmdUI->m_nID)
 //   pCmdUI->Enable(FALSE);


 //方法二
//保存了当前跟它相关的菜单项的索引
if(0==pCmdUI->m_nIndex)
pCmdUI->Enable(FALSE);
}


8.右键弹出菜单的功能:


Project->Add to Project->Components and Controls


void CMenuView::OnRButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
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);
}


void CMenuView::OnShow() 
{
// TODO: Add your command handler code here
MessageBox("view show");
}




消息的分类: 
  a.标准消息:
    除WM_COMMAND之外,所以以WM_开头的消息。
    从CWnd派生的类,都可以接收到这类消息。


  b.命令消息:
   来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。
   从CCmdTarget派生类,都可以接收到这类消息。


  c.通告消息:
   由控件产生的消息,例如,按钮的单击,列表框的等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。
   从CCmdTarget派生的类,都可以接收到这类消息。


CMenuApp和CMenuDoc它们都是从CCmdTarget派生的,所以它们可以接收我们菜单的命令消息,但是,这两个类不能够接收我们的标准消息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值