《mfc第六章菜单06修改版.ppt》由会员分享,可在线阅读,更多相关《mfc第六章菜单06修改版.ppt(25页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Visual C+for Windows ProgrammingGuo yan-fang第五章第五章菜单,工具栏和状态栏菜单,工具栏和状态栏菜单在程序中的位置:菜单菜单的作用:菜单是一个Windows程序中的命令的集合,程序功能的体现.菜单项可以发布命令消息。菜单术语:l 菜单l 主菜单l 子菜单l 菜单项l 分隔条l 浮动菜单l 菜单项的ID号与菜单项相关的命令消息:1.更新命令消息:UPDATE_COMMAND_UI 2.命令消息:COMMAND菜单项的命令消息的执行顺序:执行每个菜单项命令会依次触发下两种消息:1.先引发菜单项的更新命令消息:UPDATE_COMMAND_UI 2.在引发
2、菜单项的命令消息:COMMAND 所以菜单的初始化内容常放在更新命令消息的消息处理函数中,菜单的命令功能放在命令消息的消息处理函数中.菜单项的命令消息的处理顺序是:因为SDI结构项目中的四个类都是CCmdTarget的子类,所以他们都能接收命令消息,因此对于命令消息WM_COMMAND的处理顺序是:(1)视窗类;(2)文档类;(3)窗口类;(4)应用类.菜单项的种类及其它:有主,子菜单左边带v的菜单-带检查标志的菜单右边带的菜单-有对话框的菜单右边带的菜单-有子菜单的菜单字母带下划线的菜单(F)-该菜单的快捷键带功能键的菜单(如:Ctrl+M)-该菜单的加速键分隔线灰化的菜单浮动式的菜单子菜单
3、可有功能提示(在状态条中)快捷键的生成方法:在菜单编辑器中,打开菜单属性表,在Caption内,找到你欲定义为快捷键的字母,在此字母前加上字符“&”,此快捷键即生成.使用快捷键的方法:先亮出的菜单,然后按“Alt+快捷键”.加速键的生成方法:在菜单编辑器中,打开菜单属性表,在Caption内的名串後,加上字符串“tCtrl+字母”,然后修改加速表资源Accelerator,设置加速键,此时加速键即生成.使用加速键的方法:加速键与快捷键不同,不必亮开菜单,在任何时候都可使用加速键.菜单项灰化的方法:在更新命令消息的消息处理函数中:void C类名:OnUpdate函数名(CCmdUI*pCmdU
4、I)/TODO:Add your command update UI handler code here pCmdUI-Enable(TRUE);/不灰化 pCmdUI-Enable(FALSE);/灰化菜单项设置的方法:在更新命令消息的消息处理函数中:void C类名:OnUpdate函数名(CCmdUI*pCmdUI)/TODO:Add your command update UI handler code here pCmdUI-SetCheck(1);/设置 pCmdUI-SetCheck(0);/不设置浮动菜单的实现方法:1.生成一新菜单IDR_MENU1;2.通过ClassWiza
5、rd建立消息WM_CONTEXTMENU的映射3.为WM_CONTEXTMENU消息的消息处理函数编程:void CEx7View:OnContextMenu(CWnd*pWnd,CPoint point)/TODO:Add your message handler code here/弹出IDR_MENU1菜单的第一个主菜单项的子菜单帘CMenu m;m.LoadMenu(IDR_MENU1);CMenu*p=m.GetSubMenu(0);p-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);介绍Track
6、PopupMenuTrackPopupMenu函数:CMenu:TrackPopupMenu BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd*pWnd,LPCRECT lpRect=NULL);其中:nFlags :TPM_CENTERALIGN:2 (相对于X坐标而言)TPM_LEFTALIGN :1 (相对于X坐标而言)TPM_RIGHTALIGN :3 (相对于X坐标而言)TPM_LEFTBUTTON:浮动菜单在x,y点的左边弹出;TPM_RIGHTBUTTON:浮动菜单在点x,y的右边弹出.x,y:鼠标的坐标;pWnd:当前窗口;lpR
7、ect:NULL.menuItem1menuItem2menuItem3123总结关于菜单我们学习了:1.菜单项的种类2.与菜单相关的命令消息 COMMAND UPDATE_COMMAND_UI 3.普通菜单的建立和使用 4.浮动菜单的生成和使用 工具栏l工具栏、状态栏、对话框栏都属于控制栏。它们都是从CControlBar派生出来的。工具栏 l工具栏是CToolBar类的一个对象,状态栏是CStatusBar类的一个对象。它们都是从CControlBar类派生出来的。l在典型的SDI应用程序中,CToolBar对象占用CMainFrame客户区的顶部,CStatusBar对象占用CMainF
8、rame客户区的底部,视图占用框架的其余部分(CMainFrame客户区的中间部分)。l多数情况下,工具栏按钮对应于一个菜单项,所以工具栏按钮会产生与菜单一样的命令消息。工具栏的实现:l创建自己的工具栏创建新的工具栏资源(将在OnCreate()中使用)在主框架窗口类中增加CToolBar成员变量。在OnCreate()中增加创建工具栏的相应代码,包括实现Docking(停靠)或Floating(浮动)技术。m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIP
9、S|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)|!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)lDocking工具栏的三个必须步骤:使框架窗口支持使框架窗口支持Docking操作操作lCFrameWnd:EnableDocking()使工具栏支持使工具栏支持Docking操作操作lCControlBar:EnableDocking()将工具栏将工具栏Docking到框架窗口的指定边框上到框架窗口的指定边框上。lCFrameWnd:DockControlBar()l使工具栏永久浮动(Floating)的两个步骤:在CControlBar:Enab
10、leDocking中使用参数0相对应CFrameWnd:DockControlBar使用CFrameWnd:FloatControlBar 状态栏状态栏k工具栏、状态栏、对话框栏都属于控制栏。它们都是从CControlBar派生出来的。1.状态栏的状态栏的pane:2.状态栏数组状态栏数组:(在在MaimFrm.cpp中定义中定义)static UINT indicators=ID_SEPARATOR,/status line indicatorID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;pane与数组元素一一对应与数组元素一一对
11、应.与状态栏相关的名词与概念:pane0pane1pane2pane3创建状态栏的三部曲:1.设定CStatusBar对象:CStatusBar sb;2.调用Create()函数 或 CreateEx()函数;3.调用SetIndicators()函数使数组元素和 pane对应起来.函数CWnd:SetWindowText()可修 改pane0;函数CStatusBar:SetPaneText()可修 改任何pane;函数CCmdUI:SetText可修改pane;修改状态栏的pane的方法:函数CStatusBar:SetPaneInfo()可修 改任何pane宽度等信息;函数CStatusBar:SetPaneStyle()可修 改任何pane的风格;状态栏的 其他函数: