1、第四章菜单、工具栏和状态栏4.2 工具栏工具栏编程CToolBar: CToolBar 类封装了工具栏的操作1、创建工具条BOOL CreateEx( CWnd* pParentWnd,DWORD dwCtrlStyle = TBSTYLE_FLAT,DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP,CRect rcBorders = CRect( 0, 0, 0 ),UINT nID = AFX_IDW_TOOLBAR);说明:此成员函数用来创建一个 Windows工具条(一个子窗口)并将它与该 CToolBar对象连接。它还将工具
2、条的高度设置为一个缺省值。当在嵌入工具条控件的创建期间需要指定某个特定的风格时,使用 CreateEx来代替 Create。返回值:如果成功则返回非零值;否则返回 0。参数: pParentWnd参数:指向工具条的父窗口的指针。 dwCtrlStyle参数:嵌入 CToolBarCtrl对象的附加风格,用来指针工具按钮的风格,当为 TBSTYLE_FLAT 时表示工具按钮是“平面”的。 dwStyle 参数:用来制定工具栏的风格。WS_CHILD 表示其是子窗口, WS_VISIBLE 表示其可见的。 CBRS_TOP 表示工具栏放置在父窗口的顶部,CBRS_GRIPPER 表示工具栏前面有一
3、个 “把手” ,CBRS_TOOLTIPS 表示允许有工具提示,CBRS_FLYBY 表示在状态栏显示工具提示文本,CBRS_SIZE_DYNAMIC 表示工具栏在浮动时,其大小是可以动态改变的。rcBorders 参数是用来指定工具栏四周的边框大小,一般都为 0。 nID 参数是用来指定工具栏这个子窗口的标识 ID(与工具栏资源标识不同)。AFX_IDW_TOOLBAR 是系统内部的工具栏子窗口标识,并将 AFX_IDW_TOOLBAR + 1 的值表示默认的工具栏子窗口标识。如果在创建新的工具栏时没有指定相应的子窗口标识,则会使用默认的 AFX_IDW_TOOLBAR。这样,当打开“查看”
4、菜单时,单击“工具栏”菜单时,显示或隐藏的工具栏不是原来的工具栏而是新添加的工具栏。因此,需要重新指定工具栏子窗口的标识,并使其值等于 AFX_IDW_TOOLBAR + 10。2、装载工具条CToolBar:LoadToolBarBOOL LoadToolBar( LPCTSTR lpszResourceName );BOOL LoadToolBar( UINT nIDResource ); 说明:此成员函数用来装入由 lpszResourceName或 nIDResource指定的工具条。返回值:如果成功则返回非零值;否则返回 0。参数:lpszResourceName:指向要被装入的工具
5、条的资源名称的指针。nIDResource:要装入的工具条的资源 ID。3、使得工具栏一般具有停靠或浮动特性调用 CFrameWnd 类的成员函数 EnableDocking 和 CFrameWnd:DockControlBar。1)CFrameWnd:EnableDockingvoid EnableDocking(DWORD dwDockStyle); 说明:调用此成员函数使框架窗口中的可停靠控件条可用。缺省时,控件条会以下面顺序停靠于框架窗口中:顶部、底部、左部、右部。参数: dwDockStyle:指定框架窗口的哪一边可作为控件条的停靠点,可为以下之中的一个或几个: CBRS_ALIGN
6、_TOP 允许停靠到用户区的顶部。 CBRS_ALIGN_BOTTOM 允许停靠到用户区底部。 CBRS_ALIGN_LEFT 允许停靠到用户区左边。 CBRS_ALIGN_RIGHT 允许停靠到用户区右边。 CBRS_ALIGN ANY 允许停靠到用户区任意一边。 2)CFrameWnd:DockControlBarvoid DockControlBar(CControlBar* pBar, UINT nDockBarID=0, LPCRECT lpRect = NULL);说明:使一个控件条停靠于框架窗。控件条可被停靠于框架窗口中由CControlBar:EnableDocking和 CF
7、rameWnd:EndbleDocking调用指定的一边,此边由 nDock-BarID指定。参数: pBar 指向将停靠的控件条。 nDockBarID 决定框架窗口的哪一边用于停靠,可为 0或以下之中的一个或多个: AFX_IDW_DOCKBAR_TOP 停靠到框架窗口的顶部。 AFX_IDW_DOCKBAR_BOTTOM 停靠到框架窗口底部。 AFX_IDW_DOCKBAR_LEFT 停靠到框架窗口左边。 AFX_IDW_DOCKBAR_RIGHT 停靠到框架窗口右边。 如果为 0,控件条可以在目标框架窗口中任意可停靠的地方停靠。 lpRect 以屏幕坐标表示目标框架窗口非用户区中可被控
8、件条停靠的位置。 4、设置工具条是否可见CFrameWnd:ShowControlBarvoid ShowControlBar(CControlBar* pBar,BOOL bShow,BOOL bDelay);说明:调用此成员函数显示或隐藏一个控件条。参数: pBar 指向将显示或隐含的控件条。 bShow 如果为 TRUE,则指定控件条将被显示;如果为 FALSE,则隐藏。 bDelay 如果为 TRUE,则延迟显示控件条;如果为 FALSE,则立即显示。 int bShow = m_wndTestBar.IsWindowVisible();ShowControlBar( 4.3 状态栏4
9、.3.1 状态栏的定义用 MFC AppWizard(.exe)创建的 SDI 或 MDI 应用程序框架中,有一个静态的 indicator 数组,它是在 MainFrm.cpp 文件中指定的,被 MFC 用作状态栏的定义。4.3.2 状态栏的常用操作Visual C+ 6.0 中可以方便地对状态栏进行操作,如增减窗格、在状态栏中显示文本、改变状态栏的风格和大小等,并且 MFC 的 CStatusBar 类封装了状态栏的大部分操作。1. 增加和减少窗格状态栏中的窗格可以分为信息行窗格和指示器窗格两类。若在状态栏中增加一个信息行窗格,则只需在 indicators 数组中的适当位置中增加一个 I
10、D_SEPARATOR 标识即可;若在状态栏中增加一个用户指示器窗格,则在 indicators 数组中的适当位置增加一个在字符串表中定义过的资源 ID,其字符串的长度表示用户指示器窗格的大小。若状态栏减少一个窗格,其操作与增加相类似,只需减少 indicators 数组元素即可。ID_SEPARATOR:增加一个信息行的窗口;ID_INDICATOR_CAPS:显示 CapsLockID_INDICATOR_NUM:显示 NumLockID_INDICATOE_SCRL:显示 ScrollLock2. 在状态栏上显示文本调用 CStatusBar:SetPaneText 函数可以更新任何窗格
11、(包括信息行窗格)中的文本。此函数原型描述如下:BOOL SetPaneText( int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE );其中,lpszNewText 表示要显示的字符串。nIndex 是表示设置的窗格索引(第一个窗格的索引为 0)。若 bUpdate 为 TRUE,则系统自动更新显示的结果。4.33 改变状态栏的风格在 MFC 的 CStatusBar 类中,有两个成员函数可以改变状态栏风格,它们是:void SetPaneInfo( int nIndex, UINT nID, UINT nStyle, int cxWi
12、dth );void SetPaneStyle( int nIndex, UINT nStyle ); 其中,参数 nIndex 表示要设置的状态栏窗格的索引,nID 用来为状态栏窗格指定新的ID,cxWidth 表示窗格的像素宽度, nStyle 表示窗格的风格类型,用来指定窗格的外观,例如 SBPS_POPOUT 表示窗格是凸起来的,具体见表 4.6。表 4.6 状态栏窗格的风格类型风格类型 含 义SBPS_NOBORDERS窗格周围没有 3D 边框SBPS_POPOUT 反显边界以使文字“凸出来”SBPS_DISABLED 禁用窗格,不显示文本SBPS_STRETCH 拉伸窗格,并填充窗格不用的空白空间。但状态栏只能有一个窗格具有这种风格SBPS_NORMAL 普通风格,它没有“拉伸” , “3D 边框”或“ 凸出来”等特性