友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第51章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




工具条包括的是最经常使用的命令。大型程序通常有多个工具条来为 

不同的用户任务服务。即使你的程序只有一个工具条,也要使用户在 

感觉它碍事时能将其藏起来。  



从编程的角度看,工具条是一个显示一系列位图按钮的子窗口。一旦 

创建了工具条并使其可见,就不能再忽略它,因为它将和菜单与加速 

键一样生成WM_MAND消息。但应使工具条的命令ID与菜单和加速键 

的命令ID同步。  



在这一节中,将介绍几个有关工具条的问题。我们将首先看看工具条 

在MFC层次结构中的位置,然后我们再介绍有关动态创建和修改工具 


…………………………………………………………Page 236……………………………………………………………

条的若干细节,最后,我们将说明工具条定位与消隐的一些技术并给 

出一个相应的较小的例程。我们计划按下列顺序讲解:  



  l MFC控制条  



  l 创建工具条  



  l 显示和隐藏工具条  



从图5。18中可见工具条类的基本类为CControlBar,而该基本类是由 

CWnd类派生的。掌握这个继承关系对我们来说是很有用的。例如,由 

于所有的控制条都是有CWnd类派生的,所有的控制条都连接到一个 

Windows  APIH窗口。因此,CWnd的所有功能――创建、移动、显示和 

隐藏窗口――在用控制条工作是都是可用的。  



CToolBar类有几个兄弟类,包括CStatusBar和COleResizerBar, 

CDialotBar。当发生请求时,AppWizard通过创建一个CStatusBar对象 

来创建一个状态条。正如我们在介绍菜单时所提到的,状态条位于帧 

窗口的底部并显示有关菜单选择的帮助消息。当用户在各按钮上移动 

鼠标时,状态条也显示关于不同工具条按钮的详细帮助信息。  



                                



               图5。 18 类CToolBar继承关系图  



CDialogBar类创建对话条,它位于工具条和对话框之间。对话条能够 

象对话框那样起控制作用,但它象一个工具条那样位于帧窗口中。我 

们对此不打算作详细介绍,有兴趣的读者可以参考有关书籍。  



MFC控制条COleResizerBar可以改变在为OLE对象的大小。  



MFC的工具条 (和对话条)都是可迁移的。如允许这一特性,用户就 

可将一个工具条移到一个具有不同边界的帧窗口中。但它将根据这一 

新窗口的边界而更新以表明它所迁移的位置。此外,工具条还可被移 

出帧边界并被放到空闲的调色板上。  



MFC工具条也支持工具便笺,工具便笺可帮助用户理解单独一个位图 

按钮的作用。如允许这一特性,用户就可通过将鼠标光标移到一个工 


…………………………………………………………Page 237……………………………………………………………

具条按钮上 (并不单击按钮)来调用工具便笺支持。过一会儿以后, 

就会在工具条按钮上方的一个小的正文窗口中显示工具便笺――一个 

简略的字或短语。  



为在你的MFC程序中使用工具条,必须协调使用位图资源,包括工具 

条自身以及帧窗口等几项。为帮助用户对此的理解。在后面我们将介 

绍如何创建自己的工具条。  



下面我们创建一个工具条。AppWiard 自动生成一个工具条。但它的某 

些特性,比如象显示和隐藏工具条,则被隐藏在现有MFC类中。为了 

能更详细地介绍工具条,我们将创建另一个菜单。在此之后,我们将 

说明两个工具条如何共处于同一个程序中。这样,你就将看到创建一 

个附加的工具条是多么容易。  



创建工具条分五步。首先要创建按钮映象的位图。其次要建立一个将 

按钮映射到你的程序命令码的数组。第三要编写创建工具条并将其适 

当初始化的程序。一旦工具条窗口被创建,第四步和第五步是将按钮 

映象和命令ID与工具条相连接。一旦这些基本步骤完成后,就可采取 

其它步骤来进一步改善工具条。下面我们分别讲解。  



1。   创建按钮映象位图。应将该位图作为位图资源存储起来。如图 

5。19,打开资源编辑器,将按钮映象的位图创建到一行中。每个映象 

的缺省大小是16×15象素。如果你希望使用别的大小,那么你就需要 

调用函数CToolBar::SetSize通知应用程序相应的改变。该函数的相 

关信息可以通过系统的帮助信息获得,在此不再赘述。  



                                 



               图5。 19 建立工具条位图资源  



2。   定义命令码数组。映射按钮映象到命令ID号。下面的代码摘自例 

程,无符号整形数组 (UINT)为上图所示工具条按钮的对应数组。  



3。   创建并初始化工具条对象。与其它创建过程类似,采用两步法生 

成:先声明对象,再调用初始化函数CToolBar::Create生成。该函数 

原型为:  



BOOL Create( CWnd* pParentWnd; DWORD dwStyle=WS_CHILD| WS_VISIBLE | CBRS_TOP;  

UINT nID = AFX_IDW_TOOLBAR );  


…………………………………………………………Page 238……………………………………………………………

该函数中参数pParentWnd为指向工具条所在父窗口的指针 (别忘了工 

具条本身也是窗口 !),dwStyle为工具条的风格说明,其取值如表 

5。1所示:  



该函数最后一个参数表示工具条子窗口的ID号。  



如下述代码生成一工具条:  



d_pToolBar=new CToolBar( );  



d_pToolBar…》Create(this;WS_CHILD|CBRS_TOP;0x9100);  



                       表5。 1 工具条风格  



              标志         简单描述  



              WS_VISABLE  使工具条窗口初始可见  



              CBRS_BOTTOM  初始时将工具条放到窗口底部  



              CBRS_FLYBY  鼠标光标在按钮上暂停时,显 

                         示命令描述  



              CBRS_NOALIGN   防止控制条在其父窗口改变大 

                         小时被复位  



              CBRS_TOOLTIPS  鼠标光标在按钮上暂停时,显 

                         示工具便笺  



              CBRS_TOP   初始时将工具条放在窗口底部  



4。   将储存在位图资源中的按钮映象与程序的工具条相连接。这可以 

通过函数调用CToolBar:LoadBitmap达到。该函数原型为:  



BOOL LoadBitmap( LPCTSTR lpszResourceName );  



BOOL LoadBitmap( UINT nIDResource );  



该函数提供的重载两个不同版本,使我们既可以通过指向位图资源的 

指针调用,也可以通过该位图的ID号调用达到。  



如下段代码:  



d_pToolBar…》LoadBitmap(IDR_TOOLS);  



5。   作为该过程的最后一步,我们需要将按钮与命令ID联系起来。这 

可以用一个在第二步中创建的数组的指针来调用函数 


…………………………………………………………Page 239……………………………………………………………

CToolBar::SetButtons达到,该函数的原型为:  



BOOL SetButtons( const UINT* lpIDArray; int nIDCount );  



其中参数lpIDArray为指向一命令ID数组的指针。当然,为了使用不 

含按钮的工具条,该参数可能为NULL,参数nIDCount为前一数组中的 

元素个数。  



一般来说,我们可以这样编写我们的程序:  



d_pToolBar…》SetButtons(buttons;sizeof(buttons)/sizeof(UINT);  



到此为止,我们所创建的工具条已经实现。当然,我们可能仍然需要 

以别的方式改善工具条的操作。对于一般要求来说,最常用的操作也 

许就是移动和显隐切换了。  



我们先谈其移动。在缺省状况下,一个CToolBar工具条只能被应用程 

序所移动。但也可以使用户能够将工具条移到帧的另一部分。为此, 

需向工具条及帧窗口发送消息。这可通过调用 

CToolBar::EnableDocking和CFrame::EnableDoc
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!