工具栏、状态栏m.ppt_第1页
工具栏、状态栏m.ppt_第2页
工具栏、状态栏m.ppt_第3页
工具栏、状态栏m.ppt_第4页
工具栏、状态栏m.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

工具栏、状态栏和组合栏,参考书,MFC Windows 程序设计第12章,1.1 创建和初始化工具栏,因为工具栏是应用程序的主框架窗口的子窗口,通常随框架窗口的创立而创立,所以一般在框架窗口类中添加一个CToolBar成员,并在框架窗口的OnCreate函数中调用CToolBar:Create。 如: m_wndToolBar.Create (this, WS_CHILD WS_VISIBLE CBRS_BOTTOM); 或 m_wndToolBar.Create (this); m_wndToolBar.SetBarStyle (m_wndToolBar.GetBarStyle () ,1.2 为工具栏添加文字,在资源中双击工具栏的图标,修改图标大小为40,19 在创建工具栏的代码下加入如下代码 m_wndToolBar.SetButtonText(0,_T(“New“); m_wndToolBar.SetButtonText(1,_T(“Open“); m_wndToolBar.SetButtonText(2,_T(“Save“); m_wndToolBar.SetButtonText(4,_T(“Cut“); m_wndToolBar.SetButtonText(5,_T(“Copy“); m_wndToolBar.SetButtonText(6,_T(“Paste“); m_wndToolBar.SetButtonText(8,_T(“Print“); m_wndToolBar.SetButtonText(10,_T(“Help“); m_wndToolBar.SetSizes(CSize(48,42),CSize(40,19);/第一个size是BUTTON的大小,第二个size是图标的大小。 在添加文本后再调用SetSizes(),1.3 修改工具栏的样式,CToolBar:SetButtonStyle 创建复选按纽,使之一直处于下陷的状态直到再一次单击之。 m_wndToolBar.SetButtonStyle(1,TBBS_CHECKBOX); 注:当程序处理了ON_UPDATE_COMMAND_UI消息,并调用CCmdUI:SetCheck,则标准按纽会转换为复选按纽。,1.3 修改工具栏的样式,CToolBar:SetButtonStyle 创建单选按纽,它们一直处于下陷状态,直到该组中的其它单按纽被按下。 m_wndToolBar.SetButtonStyle(5,TBBS_CHECKGROUP); m_wndToolBar.SetButtonStyle(5,TBBS_CHECKGROUP); m_wndToolBar.SetButtonStyle(5,TBBS_CHECKGROUP); 此时5、6、7为一组单选按纽,它们之中只有一个被选中。,1.3 修改工具栏的样式,CToolBar:GetState(), CToolBar: SetState() 给工具栏添加单选按纽时,应在每组中选中一个成员作为默认按纽,如下代码所示。 int nState = m_wndToolBar.GetToolBarCtrl().GetState(ID_BUTTON_A);/得到按纽的状态,是否可用,是否被按下,是否被选中等等 m_wndToolBar.GetToolBarCtrl().SetState(ID_BUTTON_A,nState|TBSTATE_CHECKED);/如果该按纽没有被选中,则设置为选中状态。,1.4 固定式和浮动式工具栏,CControlBar:EnableDocking(.) m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY) EnableDocking(CBRS_ALING_ANY) DockControlBar(&m_wndToolBar):停靠在默认位置,顶部 DockControlBar(&m_wndToolBar,AFX_IDW_DOCKBAR_RIGHT):右端,固定式和浮动式工具栏(续),FloatControlBar( FloatControlBar可以有第三个参数,如果参数为CBRS_ALIGN_TOP,则工具栏为水平放置。如果为CBRS_ALIGN_LEFT,则垂直放置。 如果以0调用EnableDocking,然后再调用FloatControlBar,则能得到一个浮动的工具栏,但它无法停放到框架窗口的一侧。 CControlBar:IsFloating,判断是否为浮动状态。 SetWindowText为浮动工具栏添加标题。 通过设置样式:CBRS_SIZE_DYNAMIC标志,可以使用户调整浮动工具栏的大小。而标志CBRS_SIZE_FIXED,则保证工具栏的大小与形状不变。 如果创建多行包含多行按钮的静态工具栏,则实用样式TBBS_WRAPPED告诉CToolBar换行符的位置,见下页示例代码,1.5 代码示例:,m_wndToolBar.SetWindowText(“MYTOOLBAR“); /m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle()|CBRS_SIZE_DYNAMIC); m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle()|CBRS_SIZE_FIXED); m_wndToolBar.SetButtonStyle(2,m_wndToolBar.GetButtonStyle(0)|TBBS_WRAPPED); m_wndToolBar.SetButtonStyle(5,m_wndToolBar.GetButtonStyle(0)|TBBS_WRAPPED);,1.6 控制工具栏的可见性,菜单项的ID为:ID_VIEW_TOOLBAR、ID_VIEW_STATUS_BAR。原因为在CFrameWnd的消息映射表中已有该消息映射。 void ShowControlBar( CControlBar* pBar, BOOL bShow, BOOL bDelay ); (pBar-GetStyle() & WS_VISIBLE) != 0判断pBar是不是处于显示状态。 设置bar的style是否为WS_VISIBLE是无法实现显示和隐藏工具栏的。,1.7 保持工具栏按钮和应用程序同步,CCmdUI:SetCheck() CCmdUI:Enable(),1.8 添加工具提示和状态栏工具说明,在资源的属性中,添加Prompt内容,格式为 string1nstring2 其中string1为在状态栏中显示的内容 string2为鼠标划过工具栏的该按纽时显示的提示内容 工具栏的样式中必须包含CBRS_FLYBY,1.9 在工具栏中添加非按纽控件,1、在工具栏中添加一个按纽,并设置其ID。 2、在CMainFrame中添加非按纽控件的对象定义,如CComboBox m_ComboShape;(假设此处添加一个ComboBox) 3、在创建工具栏函数的后面,创建该控件: CRect rect; m_wndToolBar.GetItemRect(12, 对于函数SetButtonInfo,参数1为按纽的索引项,参数2 为按纽的ID,参数3为按纽的样式,如果为TBBS_SEPARATOR, 则参数4为设置该按纽的宽度。,1.9 在工具栏中添加非按纽控件,4、手工添加该控件的响应函数 .h afx_msg void OnSelchangeShape(); .cpp ON_CBN_SELCHANGE(ID_SHAPE, OnSelchangeShape) void CMainFrame:OnSelchangeShape() CShapesView* pview = (CShapesView*)GetActiveView(); pview-DrawShape(m_ComboShape.GetCurSel(); ,1.10 使工具栏设置永久化,在OnCreate()函数中调用LoadBarState(“.”) 调用LoadBarState将保存的设置信息读出,并将每个工具栏及状态栏恢复到以前的状态。 在OnClose()函数中调用SaveBarState(“.”) SaveBarState将每个工具栏的停放或浮动状态、位置、方向和或见性写到注册表或私有INI文件中。如果应用程序包括状态栏,SaveBarState也会记录有关状态栏的信息。 注意,如果添加了自已的工具栏,如果想要正确的保存与恢复配置信息,则创建自已的工具栏时,应该将工具栏的ID传给创建函数,而不是默认的创建形式。如 m_ToolBarColor.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | ,CRect(0,0,0,0),IDR_TOOLBAR_COLOR); 而不是 m_ToolBarColor.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | );,2.1 状态栏,状态栏可以显示与上下文有关的工具栏按钮和菜单项的帮助信息。在Windows中已经变的非常普遍。 MFC提供了方便的方法来开发状态栏,当CStatusBar被连接到框架窗口时,如果有菜单项被加亮显示,CStatusBar则自动显示帮助文本。如果工具栏的样式包含CBRS_FLYBY标志,则状态栏也显示工具栏按钮的帮助文本。,2.2 创建和初始化状态栏,CStatusBar m_wndStatusBar; static UINT indicators = ID_SEPARATOR, / status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, ; m_wndStatusBar.Create(this); m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT);,2.3 创建一个简单的“二进制”窗格,添加一个字符串变量,如ID_DEMO 在String Tab中添加其对应的字符串,如“DEMO”,该字符串即为要在状态栏中显示的字符串。 修改indicators,在后面加上一项ID_DEMO, 在CMainFrame中添加一个响应函数: afx_msg void onUpdateDemo(CCmdUI* pCmdUI); 在CMainFrame的消息映射表中添加 ON_UPDATE_COMMAND_UI(ID_DEMO, onUpdateDemo) 添加响应函数: void CMainFrame:onUpdateDemo(CCmdUI* pCmdUI) pCmdUI-Enable(m_bShow);/可以在外面修改m_bShow来决定“DEMO“是否显示 ,2.4 默认的窗格常量,ID_INDICATOR_CAPS ID_INDICATOR_NUM ID_INDICATOR_SCRL . 在CFrameWnd类中已经定义了其更新函数:(见winfrm.cpp) ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS, OnUpdateKeyIndicator) ON_UPDATE_COMMAND_UI(ID_INDICATOR_NUM, OnUpdateKeyIndicator) ON_UPDATE_COMMAND_UI(ID_INDICATOR_SCRL, OnUpdateKeyIndicator),2.5 为菜单项提供上下文相关帮助,如果第一个窗格(左端的)赋予ID值ID_SPARATOR,这就等于启动了MFC一个特殊功能,当用户加亮显示其菜单项时,主框架会查看是否包含ID值等于菜单项ID的字符串资源,如果匹配,则加载字符串资源并把它显示在状态栏窗格中。因此,通过提供ID为菜单项ID的字符串资源,就可以给应用程序菜单提供与上下文有关的帮助。如果菜单项与工具栏的ID相同,则字符串资源既可以作为菜单项的帮助文本,也可以作为工具栏的掠过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论