菜单 主讲人:孙鑫 tp://www.sunxin.org
菜单 主讲人:孙鑫 http://www.sunxin.org
消息的分类 ■标准消息 除 WM COMMAND之外,所有以WM开头的消息。 从CWnd派生的类,都可以接收到这类消息 命令消息 来自菜单、加速键或工具栏按钮的消息。这类消息都以 WM COMMAND呈现。 在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通 过消息的 wParam参数识别。 从 CCmdTarget派生的类,都可以接收到这类消息。 ■通告消息 由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息, 为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以 WM COMMAND形式呈现 从 CCmdTargeti派生的类,都可以接收到这类消息 tp://www.sunxin.org
消息的分类 ◼ 标准消息 除WM_COMMAND之外,所有以WM_开头的消息。 从CWnd派生的类,都可以接收到这类消息。 ◼ 命令消息 来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。 在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通 过消息的wParam参数识别。 从CCmdTarget派生的类,都可以接收到这类消息。 ◼ 通告消息 由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息, 为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以 WM_COMMAND形式呈现。 从CCmdTarget派生的类,都可以接收到这类消息。 http://www.sunxin.org
命令消息的路由 AEx WndProc AEx CallWndProc WindowProc OnWndMs OnCommand OnNotify OnCmdMs tp://www.sunxin.org
命令消息的路由 AfxWndProc AfxCallWndProc WindowProc OnWndMsg OnCommand OnNotify OnCmdMsg http://www.sunxin.org
菜单的结构 300301302303304 3 楼2 0 0 房间 tp://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 U消息,MFC就在其中创建“八 CCmdUI对象。我们可以通过手工或利用 Class wizard在消息映射中添加 ON UPDATE_ COMMAND UI宏来捕获 CN UPDATE COMMAND_UI 消息 在后台所做的工作是:操作系统发出 WM INITMENUPOPUP消息, 然后由MFC的基类如 CFrameWnd接管。它创建一个 CCmdUI对象,并与 第一个菜单项相关联,调用对象的一个成员函数 DoUpdate0。这个函数 发出CN_ UPDATE COMMAND UI消息,这条消息带有指向 CAndu对 象的指针。同一个 CCmdUI对象就设置为与第二个菜单项相关联,这样 顺序进行,直到完成所有菜单项 更新命令U处理程序仅应用于弹出式菜单项上的项目,不能应用 于永久显示的顶级菜单项目。 tp://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