MFC消息映像实现动态菜单
2007-10-04 20:22:49 来源:WEB开发网Afx_msg return_type ClassMethod(paras table)
类CCmdUI 专门(且仅仅)与ON_UPDATE_COMMAND_UI 消息映像宏配套使用,用于管理菜单(还有工具栏按扭等)的实时状态,如是否变灰,是否加选中标记等。
ON_UPDATE_COMMAND_UI 消息映像宏原型为:
ON_UPDATE_COMMAND_UI(Menu_Item_ID, Menu_Proc)
ON_UPDATE_COMMAND_UI 消息映像宏将一个菜单项(命令项)和一个更新处理过程联结,从而在适当的时机自动调用此更新处理过程来完成对菜单项状态的更新。
Menu_Item_ID 为菜单项的ID 号,Menu_Proc 为此菜单项的更新处理函数,为:
afx_msg void Menu_Proc (CCmdUI* pCmdUI)
它带有一个CCmdUI 类指针,使用它可调用CCmdUI 的类方法。与菜单有关的类方法有:
·Enable(BOOL) 使菜单项有效或无效
·SetText(LPCTSTR) 设置菜单项的文本
·SetCheck(int) 加上或去掉选中标记“X”
·SetRadio(BOOL) 加上或去掉选中标记“.”
MenuProc 被调用的时机有以下几种情况:
·用鼠标选中包含该菜单项的菜单条
·用热键选中包含该菜单项的菜单条
·用快捷键选中与该菜单项在同一菜单条下的任一菜单项
我们以下面菜单结构为例:
Test menu
Item One ID_ITEM_ONE Ctrl+1
Item Two ID_ITEM_TWO Ctrl+2
Popup Popup One ID_POPUP_ONE Ctrl+3
Popup Two ID_POPUP_TWO Ctrl+4
当用鼠标左键点按Test menu 菜单条或按Alt+t 或按Ctrl+1/2/3/4 时,四个菜单项的更新处理过程MenuProc 都将被调用。
当我们考察上面这个具有嵌套结构的菜单时,我们面临这样一个问题:菜单项Item One/Item Two 的更新函数和Popup One/Popup Two 的更新函数形式上是否一致?当Popup One 和Popup Two 都变灰时Popup 是否自动变灰?
更多精彩
赞助商链接