Visual C++大学教程第8章 菜单、工具栏和状态栏设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


然后为菜单项关联命令消息处理函数 ,步骤如下。 • (1)在对话框类中添加一个消息处理函数 。

(2)在对话框类的消息映射部分添加 ON_COMMAND消息映射宏,将菜单 • 项的命令ID与消息处理函数关联。
• 程序设计具体步骤如下。 • (1)创建一个基于对话框的应用程序。 • (2)在主窗口中定义一个菜单成员变量。 • CMenu m_Menu;
图8.3 菜单设计窗口1

(4)在菜单设计窗口中,按〈Enter〉键 打开属性窗口,设计菜单标题,如图8.4所示 。
图8.4 菜单项属性窗口1

(5)按〈Enter〉键保存设置,返回到菜 单设计窗口,如图8.5所示。
图8.5 菜单设计窗口2

(6)如果用户需要设计子菜单,可以选 中下方的虚边框,按〈Enter〉键打开菜单 项属性窗口,在属性窗口中设置菜单项标 题和菜单ID,如图8.6所示。
图8.8 级联菜单
8.1.2 菜单项的命令处理
• (1)单击菜单栏中的“View”/“Class Wizard…”命令,打开MFC ClassWizard窗口 ,并选择Message Maps选项卡,在Object IDs 列表框中选择一个菜单项,如图8.20所示。
图8.20 类向导

(2)在该窗口的Messages列表框中双击 COMMAND,将打开“添加成员函数”窗口 ,如图8.21所示。
• BOOL ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );
(21)REMOVEMENU方法
• RemoveMenu方法用于移除一个菜
单项。 • 语法: • BOOL RemoveMenu( UINT nPosition, UINT nFlags );
(5)CREATEPOPUPMENU方法
• CreatePopupMenu方法用于创建一 个弹出式菜单窗口,并将其关联到菜单对 象上。 • 语法: • BOOL CreatePopupMenu( );
(6)LOADMENU方法
• LoadMenu方法从应用程序的可执 行文件中加载一个菜单资源,将其关联到 菜单对象上。 • 语法: • BOOL LoadMenu( LPCTSTR lpszResourceName ); • BOOL LoadMenu( UINT nIDResource );

(3)在对话框的源文件中定义两个菜单 的命令消息。 • //定义菜单资源命令ID • #define ID_MENUADD 35610 • #define ID_MENUUPDATE 35611

(4)在主窗口的头文件中添加消息处理 函数,代码如下: • afx_msg void AddInfo();
• GetMenuState方法用于返回指定菜 单项的状态或弹出菜单的项数。 • 语法: • UINT GetMenuState( UINT nID, UINT nFlags ) const;
(17)GETMENUSTRING方法
• GetMenuString方法用于获取菜单 项的文本。 • 语法: • int GetMenuString( UINT nIDItem, LPTSTR lpString, int nMaxCount, UINT nFlags ) const; • int GetMenuString( UINT nIDItem, CString& rString, UINT nFlags ) const;
(22)DRAWITEM方法
• DrawItem方法是一个虚方法,用户 可以改写该方法实现菜单的绘制。 • 语法: • virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
8.1.5 使用菜单类创建菜单
• 首先需要创建一个菜单,步骤如下 。 • (1)在对话框类中定义一个菜单对象, 调用CreateMenu方法创建菜单资源。 • (2)调用AppendMenu或InsertMenu 方法创建菜单项,设置菜单文本和命令ID 。

• • • •
• 代码如下: • void CMainFrame::OnUpdateEditUndo(CCm dUI* pCmdUI) • { • pCmdUI->Enable(); //使菜单项可用 • }
• (5)运行程序,效果如图8.25所示。
菜单项可用
图8.25 菜单项的更新机制
8.1.4 菜单类介绍
(7)DESTROYMENU方法
• DestroyMenu方法用于释放菜单窗口 ,当菜单窗口被释放前,它将从菜单对象上 分离出来。 • 语法: • BOOL DestroyMenu( ); •
(8)DELETEMENU方法
• DeleteMenu方法用于从菜单中删除 一个菜单项。 • 语法: • BOOL DeleteMenu( UINT nPosition, UINT nFlags );
• BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );
(20)MODIFYMENU方法
• ModifyMenu方法用于修改菜单项信息
。 • 语法: • BOOL ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem • = NULL );
(15)GETMENUITEMID方法
• GetMenuItemID方法根据菜单项的位 置返回菜单ID,如果菜单项是一个弹出式菜 单,则返回值为-1,如果菜单项是一个分隔 条,则返回值为0。 • 语法: • UINT GetMenuItemID( int nPos ) const;
(16)GETMENUSTATE方法
设置菜单项文本
设置菜单项命令 ID
图8.6 菜单项属性窗口2

(7)按〈Enter〉键保存设置,返回到菜 单设计窗口,如图8.7所示。
图8.7 菜单设计窗口3

(8)如果用户想要设计一个级联菜单, 可以在菜单项的属性窗口中选中Pop-up复 选框,这样,在菜单项的右侧将显示一个 箭头,效果如图8.8所示。
(9)TRACKPOPUPMENU方法
• TrackPopupMenu方法用于显示一 个弹出式菜单。 • 语法: • BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL );
(10)APPENDMENU方法
(1)Attach方法
• Attach方法用于将句柄关联到菜单 对象上。 • 语法: • BOOL Attach( HMENU hMenu );
(2)DETACH方法
• Detach方法从菜单对象上分离菜单 句柄,方法返回分离的菜单句柄。 • 语法: • HMENU Detach( );
(3)FROMHANDLE方法
(18)GETSUBMENU方法
• GetSubMenu方法用于获取弹出式 菜单中的一个菜单项。 • 语法: • CMenu* GetSubMenu( int nPos ) const;
(19)INSERTMENU方法
• InsertMenu方法用于向菜单中指定 位置插入菜单项。 • 语法: • BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem • = NULL );

在Object IDs列表框中选择“撤销 ”菜单项ID_EDIT_UNDO;在Messages 列表框中选择UPDATE_COMMAND_UI项 ,如图8.24所示。
图8.24 类向导
• (3)单击Add Function…按钮即可创建 该消息的处理函数。 • (4)单击Edit Code按钮即可定位到新建 的消息处理函数,在函数中添加代码使“ 撤销”菜单项可用。
第8章 菜单、工具栏和状态栏设计 8.1 菜 单 设 计 • 8.1.1 菜单资源设计
• (1)在工作区的ResourceView选项卡中 ,用鼠标右键单击某个节点,将弹出一个 快捷菜单,如图8.1所示。
鼠标右键单击该节点,在 弹出的快捷菜单中选择 “Insert ”菜单项
工作区的资源视图窗口
图8.1 弹出菜单
(13)ENABLEMENUITEM方法
• EnableMenuItem方法用于设置菜 单项有效、无效或变灰。 • 语法: • UINT EnableMenuItem( UINT nIDEnableItem, UINT nEnable );
(14)GETMENUITEMCOUNT方法
• GetMenuItemCount用于返回弹出 式菜单或顶层菜单的菜单数。 • 语法: • UINT GetMenuItemCount( ) const;
• (1)打开一个基于单文档的应用程序,运 行程序后发现“编辑”菜单下的菜单项都 不可用,如图8.23所示。
图8.23 运行结果ห้องสมุดไป่ตู้
• (2)如果要使“编辑”菜单下的菜单项都可用 ,就要为相应的菜单项处理 UPDATE_COMMAND_ UI消息,以“撤销”菜单项为例,打开类向导, 选择Message Maps选项卡,在Class name下 拉列表中选择CMainFrame类。

(2)在弹出的快捷菜单中选择Insert菜单项 ,打开Insert Resource窗口,如图8.2所示。
选择新添加的菜 单资源
图8.2 插入资源对话框

(3)在Resource type列表框中选择Menu 节点,单击“New”按钮,创建一个菜单, 如图8.3所示。
选中菜单项,按“Enter ” 键打开菜单属性窗口
• FromHandle方法根据菜单句柄返回 一个菜单对象指针。 • 语法: • static CMenu* PASCAL FromHandle( HMENU hMenu );
(4)CREATEMENU方法
• CreateMenu方法用于创建一个菜单 窗口,并将其关联到菜单对象上。 • 语法: • BOOL CreateMenu( );
(11)CHECKMENUITEM方法
• CheckMenuItem方法用于在弹出的 菜单项中放置或删除标记。 • 语法: • UINT CheckMenuItem( UINT nIDCheckItem, UINT nCheck );
(12)CHECKMENURADIOITEM方法
• • CheckMenuRadioItem方法用于将 单选按钮放置在菜单项之前,或从组中所 有的其他菜单项中删除单选按钮。 • 语法: • BOOL CheckMenuRadioItem( UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags );
• AppendMenu方法在菜单项的末尾 添加一个新菜单。 • 语法: • BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ); • BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );
图8.21 添加成员函数窗口
• •
(3)单击OK按钮即可编写命令消息处理 代码,代码编辑器中将显示消息处理函数 ,如图8.22所示。
图8.22 代码编辑器

(4)运行程序时,当用户单击菜单项时 ,将执行其命令消息处理函数。
8.1.3 菜单项的更新机制
• 在使用类向导为菜单添加命令处理 函数时,发现菜单除了COMMAND消息外 ,还有一个UPDATE_COMMAND_UI消息 ,该消息是“更新命令用户接口消息”。
相关文档
最新文档