当前位置:文档之家› 第4章 菜单工具栏与状态栏new

第4章 菜单工具栏与状态栏new


VC++应用程序编程
1、设置标记(bool) m_enable m_checkr m_checke
CTempView::CTempView() { // TODO: add construction code here m_checke=false; m_checkr=false; m_enable=false; }
【例4.2】为例4.1中增加的菜单项添加消息处理函数。
void CLi4_1View::OnRectangle() { // TODO: Add your command handler code here CClientDC dc(this); dc.Rectangle(10,10,200,100); } void CLi4_1View::OnEllipse() { // TODO: Add your command handler code here CClientDC dc(this); dc.Ellipse(250,100,450,250); }
选中该菜单项并按Ins键,再双击该空白菜 单项进行编辑。
VC++应用程序编程
2.属性对话框的设置 用于输入菜单项的标识符(ID)、标题(Caption)和菜 单项在状态栏上显示的提示(Prompt)信息等。
菜单项的标 识符(ID)
菜单项在状态栏上 显示的提示信息
标题
VC++应用程序编程
VC++应用程序编程
VC++应用程序编程
基本菜单操作
2 1
200
201
202
203
访问菜单项:ID或位置索引 访问子菜单:仅索引号访问
0 0 1 2 3
VC++应用程序编程
基本菜单操作
• 获取菜单栏 CMenu *GetMenu() • 获取子菜单 CMenu *GetSubMenu(int nPos) • 添加移除标记
VC++应用程序编程
• 框架向处理函数发送更新命令时,传递给处理函数一个 指向CCmdUI对象的指针。 菜单项 CCmdUI对象 工具按钮 • 利用指向CCmdUI对象的指针调用菜单或工具栏的命令接 口函数来更新用户接口对象。
成员函数
Enable() SetCheck() SetRadio() SetText()
GetMenu()->GetSubMenu(0) -> CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKE D);
VC++应用程序编程
4.1.4 菜单的有效控制 一般情况下,菜单项都不止一种状态。 例如,在没有选择任何内容时,Edit菜单下的 Copy、Cut等菜单项是无效的(灰色显示)。有时,我 们还会看到,在菜单项旁边可能还会有检查标记, 表示它是选中的还是不选中的。比如,在Word的视 图菜单项下,当用户选用【网格线】或【标尺】时, 相应菜单项前会出现一个“√”。
}
VC++应用程序编程
4.1.5 快捷菜单 为应用程序创建快捷菜单主要有以下两种方法。 1.使用Component Gallery创建快捷菜单 Component Gallery(组件画廊)是一个组件库,它 保存着可以共享或重用的代码。这些代码包括由Visual C++自带的组件和从用户工程中增加到Gallery中去的用 户自定义组件。 操作步骤:
VC++应用程序编程
第 4 章
菜单、工具栏与状态栏
VC++应用程序编程
主要内容
4.1 4.2 4.3 4.4 菜单 工具栏 状态栏 应用实例
VC++应用程序编程
4.1 菜单
4.1.1 菜单的类型
常见菜单有3种:主菜单、弹出菜单和快捷菜单。 1.主菜单 指出现在应用程序主窗口或最上层窗口的菜单。 通常对应有一个弹出菜单作为它的子菜单。
VC++应用程序编程
void CLi4_1View::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CMenu menu,*pPopup; menu.LoadMenu(IDR_POP); //加载菜单 pPopup=menu.GetSubMenu(0); //获取子菜单 CWnd*pWndPopupOwner=this; pWndPopupOwner=pWndPopupOwner->GetParent();//返回父窗口 pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x,point.y,pWndPopupOwner); }
VC++应用程序编程
菜单命令的路由
• 菜单命令响应顺序为: 视图类、文档类、框架类、应用程序类 • 消息路由
– 框架类接收消息,转给子窗口(即视图类) – 视图类命令消息机制处理,若无,转文档类。 – 文档类命令消息机制处理,若无,转还视图类, 视图类转还框架类处理。 – 框架类命令消息机制处理,若无,转还应用程 序类。
VC++应用程序编程
2.弹出菜单 指选择主菜单或一个菜单项时弹出的子菜单。 3.快捷菜单 当右击某个界面对象时,通常会弹出快捷菜单, 它出现在鼠标箭头的位置,快速展示当前对象可用的 命令功能。
VC++应用程序编程
菜单设计一般需要经过下面三步: (1) 使用菜单编辑器编辑菜单资源,设置菜单属性 (包括菜单名和ID); (2) 使用ClassWizard进行消息映射 (3) 编辑成员函数,完成菜单所要实现的功能。
VC++应用程序编程
设计思路:
1、设置标记 “椭圆”菜单是否有效 m_enable “√” 标记在“矩形”菜单中是否显示 m_checkr “√” 标记在“椭圆”菜单中是否显示 m_checke 2、“响应”的过程 “矩形”菜单响应:“椭圆”菜单有效、“矩形”菜单加 “√” 标记,“椭圆”菜单不加“√” 标记。 “椭圆”菜单响应:“椭圆”菜单加“√” 标记,矩形菜 单不加“√” 标记。 3、“更新响应”的过程 “矩形”菜单设置标记 “椭圆”菜单设置标记,并且设置菜单有效性
UINT Chec)
VC++应用程序编程
示例
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { …… GetMenu() -> GetSubMenu(0) -> CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED); return 0; } 替换为
功能
设置菜单项是否有效 增加或清除“√”标记 增加或清除圆点标记 改变菜单显示文本
VC++应用程序编程
【例4.3】为例4.2的程序MyDraw添加更新用户界面的消 息处理函数,使程序启动时菜单项【椭圆】处于不可用 状态,当用户单击【矩形】菜单项后,在菜单项前显示 “√” 标记,并使【椭圆】菜单项变为可用。
•选择组件
•建立关联
VC++应用程序编程
【例4.4】 为例4.3中的应用程序MyDraw增加一个快捷 菜单。程序运行后,用户在视图窗口中右击,弹出一个 快捷菜单,显示主菜单“绘图”下的所有菜单项。
快捷菜单
VC++应用程序编程
2.使用TrackPopupMenu( )函数创建快捷菜单 使用菜单资源编辑器和CMenu::TrackPopupMenu( ) 函数来创建右键快捷菜单。 CMenu::TrackPopupMenu函数的原型为: BOOL TrackPopupMenu(UINT nFlags, 菜单坐标 弹出的窗口 矩形域 int x,int y, CWnd* pWnd, 屏幕位置标志
2、“响应”的过程
VC++应用程序编程
void CLi4_1View::OnRectangle() { // TODO: Add your command handler code here m_enable=true; m_checkr=true; m_checke=false; CClientDC dc(this); dc.Rectangle(10,10,200,100); } void CLi4_1View::OnEllipse() { // TODO: Add your command handler code here m_checke=true; m_checkr=false; CClientDC dc(this); dc.Ellipse(250,100,450,250); }
LPCRECT lpRect=NULL);
VC++应用程序编程
参数nflags的含义
VC++应用程序编程
【例4.5】 使用TrackPopupMenu( )函数创建例4.3中的快捷 菜单。 操作步骤: 创建新菜单 建立关联 加载并显示菜单(WM_CONTEXTMENU)
VC++应用程序编程
CMenu类的成员函数较多,但建立弹出式菜单 只需用到其中几个成员函数。 1、LoadMenu函数 BOOL LoadMenu( UINT nIDResource ); 其中nIDResource是菜单资源的ID号。 2、GetSubMenu函数 CMenu* GetSubMenu( int nPos ) const; 用于得到子菜单的指针,nPos为层数,0为第一 层子菜单……以此类推。
VC++应用程序编程
4.1.3 建立消息映射
相关主题