文档详情

MFC中菜单各函数的用法.docx

发布:2017-04-22约字共7页下载文档
文本预览下载声明
消息的分类 标准消息 除WM_COMMAND之外,所有以WM_开头的消息。 从CWnd派生的类,都可以接收到这类消息。 命令消息 来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。 从CCmdTarget派生的类,都可以接收到这类消息。 通告消息 由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。 从CCmdTarget派生的类,都可以接收到这类消息。 命令消息的路由: 注意:通常消息产生时,MFC在后台将窗口过程函数替换为了AfxWndProc(可参考MFC源代码),AfxWndProc函数会调用AfxCallWndProc函数,AfxCallWndProc函数又会调用WindowPro函数,WindowPro函数是CWnd的成员函数,接下来WindowPro函数会调用OnWndMsg函数???OnWndMsg函数会判断消息类型,是标准消息则交由CWnd类处理;是命令消息则交由OnCommand函数处理;是通告消息则交由OnNotify函数处理。最后OnCommand和OnNotify函数都会调用OnCmdMsg函数来进行处理。OnCommand函数会完成命令消息的路由,路由过程:首先消息由CMainFrame交给它的子窗口类CView,如果类中有消息响应函数则响应,否则会转而交给CDoc类处理,如果CDoc类也没有消息响应函数,则CDoc类会将消息交还给CView类,继而交还给CMainFrame类,如果CMainFrame类中也没有消息响应函数,则消息最后由CWndApp类响应。 对菜单编程时,首先要找到菜单,然后找到子菜单,最后才是菜单项。 CWnd::GetMenu函数 函数原型:CMenu* GetMenu( ) const; CMenu类封装了与菜单相关的操作。利用这个函数就可以返回一个隶属于CWnd的菜单指针。 CMenu:: GetSubMenu函数 函数原型:CMenu* GetSubMenu( int nPos ) const; int nPos 菜单序号。第一个子菜单的序号是0,该函数返回一个菜单的子菜单指针 CMenu::CheckMenuItem 该函数可以设置标记菜单(即菜单项前打勾) 函数原型:UINT CheckMenuItem( UINT nIDCheckItem, UINT nCheck ); UINT nIDCheckItem 指示要被标记的菜单项,其取值的含义由第二个参数决定 UINT nCheck 如果该参数取值为:MF_BYCOMMAND,那么第一个参数要按菜单项的ID号取值;如果该参数取值为:MF_BYPOSITION?,那么第一个参数要按菜单项的索引号取值(从0开始);当然第二个参数取值需要是MF_BYPOSITION 或 MF_BYCOMMAND的其中一个和MF_BYCOMMAND或MF_BYPOSITION的其中一个的位或(|)的组合。 CMenu::SetDefaultItem 该函数设置一个菜单项为缺省菜单项(菜单项会粗体显示) 函数原型:BOOL SetDefaultItem( UINT uItem, BOOL fByPos = FALSE ); UINT uItem 该参数的含义由第二个参数决定。如果fByPos值为FALSE,该参数按照菜单项的ID号取值,否则按菜单项的索引取值。 BOOL fByPos = FALSE 该参数用来决定uItem参数的含义 注意: 1、当按照索引访问菜单项的时候,分隔符也要计算在内! 2、一个子菜单中只能有一个缺省菜单 8、CMenu::SetMenuItemBitmaps 该函数设置一个图形标记菜单 函数原型:BOOL SetMenuItemBitmaps( UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked ); UINT nPosition 该参数含义由第二个参数决定 UINT nFlags 该参数决定第一个参数的取值。如果该参数取值为:MF_BYCOMMAND,那么第一个参数要按菜单项的ID号取值;如果该参数取值为:MF_BYPOSITION?,那么第一个参数要按菜单项的索引号取值(从0开始) const CBitmap* pBmpUnchecked 菜单项没有被选中时,需要设置的菜单项的位图指针 const CBitmap* pBmp
显示全部
相似文档