当前位置: 代码迷 >> 综合 >> 孙鑫VC++深入详解:Lesson6 Part2 -- MFC菜单更新机制 用该机制实现 Enable or Disable MenuItem
  详细解决方案

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

热度:13   发布时间:2024-01-19 15:19:28.0

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

  相关解决方案