菜单主讲人:孙鑫
http://www.sunxin.org
消息的分类
标准消息除 WM_COMMAND之外,所有以 WM_开头的消息。
从 CWnd派生的类,都可以接收到这类消息。
命令消息来自菜单、加速键或工具栏按钮的消息。这类消息都以 WM_COMMAND呈现。
在 MFC中,通过菜单项的标识( ID)来区分不同的命令消息;在 SDK中,通过消息的 wParam参数识别。
从 CCmdTarget派生的类,都可以接收到这类消息。
通告消息由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,
为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以
WM_COMMAND形式呈现。
从 CCmdTarget派生的类,都可以接收到这类消息。
http://www.sunxin.org
命令消息的路由
AfxWndProc
AfxCallWndProc
WindowProc
OnWndMsg
OnCommand OnNotify
OnCmdMsg
http://www.sunxin.org
300 301 302 303 304
0
1
2
3
0 1 2 3 4
楼层房间菜单的结构
http://www.sunxin.org
命令更新菜单项状态的维护是依赖于 CN_UPDATE_COMMAND_UI消息,
谁捕获 CN_UPDATE_COMMAND_UI消息,MFC就在其中创建一个
CCmdUI对象。我们可以通过手工或利用 ClassWizard在消息映射中添加
ON_UPDATE_COMMAND_UI宏来捕获 CN_UPDATE_COMMAND_UI
消息。
在后台所做的工作是:操作系统发出 WM_INITMENUPOPUP消息,
然后由 MFC的基类如 CFrameWnd接管。它创建一个 CCmdUI对象,并与第一个菜单项相关联,调用对象的一个成员函数 DoUpdate()。这个函数发出 CN_UPDATE_COMMAND_UI消息,这条消息带有指向 CCmdUI对象的指针。同一个 CCmdUI对象就设置为与第二个菜单项相关联,这样顺序进行,直到完成所有菜单项。
更新命令 UI处理程序仅应用于弹出式菜单项上的项目,不能应用于永久显示的顶级菜单项目。
http://www.sunxin.org