孙鑫VC++深入详解:Lesson6 Part2 -- MFC菜单更新机制 用该机制实现 Enable or Disable MenuItem

本文详细介绍了MFC中如何利用菜单命令更新机制来启用或禁用菜单项。通过在资源中添加UPDATE_COMMAND_UI消息响应函数OnUpdateEditCut,并在该函数中调用pCmdUI->Enable(true)来激活菜单项。同时,文章探讨了消息映射表的工作原理以及在不同类中实现消息响应函数的影响,展示了在CMainFrame和CMenuDoc类中处理此消息的不同效果。
摘要由CSDN通过智能技术生成

MFC菜单命令更新机制---用该机制实现 Enable or Disable  MenuItem

方法:
1)用资源中的菜单项"剪切"的ClassWizard添加一个UPDATE_COMMAND_UI消息响应函数 
   void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI) 
   同时发现MFC在MainFrm.cpp的消息映射代码处添加了一个宏:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{ {AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut) //关联CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI) 的宏 
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

MFC就是由消息映射表中的宏来调用关联的消息响应函数,对消息做出响应.
  
2) 在消息响应函数OnUpdateEditCut(CCmdUI* pCmdUI)中:
     pCmdUI->Enable(true); //就可以Enable "剪切",由灰色变成激活了.

//


//---

因为工具栏上的剪刀图标的index并不等于2,工具栏这个横条是一个整体,剪刀的index=4

  ------> 0,1,2(保存),3(分隔条),4(剪刀)

//---

//---

//---

菜单和工具栏图标都激活: 最简单就是不要用if()判断,直接Enable
  pCmdUI->Enable(true);


//--- 代码都是在CMainFrame的MainFrm.cpp中干活,为什么不在CMenuVie类,CMenuDoc类中干活? 其实都可以.   

OnTest中实验COMMAND的响应顺序是CMenuView--->CMenuDoc--->CMainFr

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值