l 菜单命令的响应顺序:视类,文档类,框架类,应用程序类。
l AfxMessageBox函数:供不是从CWnd类派生出的类使用
l Windows消息的分类:
标准消息:除WM_COMMAND之外,所有以WM_开头的消息。从CWnd类派生的类都可以接受这类消息。
命令消息:来自菜单、加速键或工具栏按钮的消息。这类消息以WM_COMMAND形式呈现,在MFC中通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CcmdTarget类派生的类都可以接收这类消息。
通告消息:由控件产生的消息,例如按钮的单击、列表框的选择等都会产生这类消息,目的是为了向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现的。从CCmdTarget派生的类都可以接收到这类消息。
CWnd派生于CcmdTarget。文档类和程序类派生于CcmdTargetl.
l 菜单命令路由
l 菜单命令消息路由的具体过程:(P168)
l CMenu* GetMenu()const;获得只想菜单栏的指针
l CMenu* GetSubMenu(int nPos)const 获得一个菜单的子菜单,nPos子菜单索引号
l UINT CheckMenuItem( UINT nIDCheckItem, UINT nCheck );为菜单项添加标记
l BOOL SetDefaultItem( UINT uItem, BOOL fByPos = FALSE );设置子菜单的默认菜单项
l 分隔符在子菜单中占据索引位置
l 一个子菜单只能有一个默认菜单项。
l BOOL SetMenuItemBitmaps( UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked );将指定位图与菜单项关联起来。
l UINT EnableMenuItem( UINT nIDEnableItem, UINT nEnable );设置菜单项的状态
l ON_UPDATE_COMMAND_UI
l BOOL SetMenu( HMENU hMenu ); 装在菜单
l MFC菜单命令更新机制(p184)
菜单项的维护依赖于CN_UPDATE_COMMAND_UI消息。CCmdUI类。
l 菜单项与工具栏上某个按钮相关联,只要他们的ID设置为同一个标识就可以了。
l BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL );显示快捷菜单
l BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );把一个新菜单项添加到一个指定的菜单项目的末尾
l BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ); 菜单项目之间插入一个新菜单项目
l BOOL DeleteMenu( UINT nPosition, UINT nFlags );删除菜单项目