友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第34部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


离散的。滑块控件一般多用于在很大范围内进行快速的选择,而上下 

控件则多用在选择范围较小而对精度要求较苛刻的场合。同时,使用 

上下控件也可以将程序要求的用户输入精度明显地表示出来。图5。30 

为Visual C++的资源编辑器中的上下控件图标。  



                                     



               图5。 30 资源编辑器中的上下控件图标  



由于上下控件在程序控制中与滑块控件的诸多相识性,在本章中,我 

们将结合两者进行比较,同时考虑到上下控件在控制方式上的特殊 

性,我们会对其特性也进行比较简单的介绍。  



首先,创建一个上下控件与创建其它控件在可视阶段并没有什么特殊 

之处。在基于对话框的程序中,将上下控件直接放到对话框中即可。 

在并非基于对话框的程序中,我们使用其生成函数Create即可:  



BOOL Create( DWORD dwStyle; const RECT& rect; CWnd* pParentWnd; UINT nID );  



函数的几个参数很容易理解。参数dwSytle指定上下控件的风格, 

rect则指定其大小和位置,参数pParentWnd为指向该控件的父窗口的 

指针,在对话框程序中,简单地设为NULL在很多场合就足够了,函数 

最后一个参数nID则指定控件的ID号。  


…………………………………………………………Page 287……………………………………………………………

但是,对于上下控件的风格 (Style)的设置则对程序控制具有很大 

的影响。随参数dwStyle取值的变化,上下控件的行为具有相当大的 

区别。下面我们结合资源编辑器中的可视实现对其作讲解。  



如图5。31中,上下控件的风格选项卡具有七个不同的域。  



  l 注意:  



  l 下面的讲解中各选项后的括号中的值为对应该选项的风格值设 

   定。  



域Orientation决定上下控件的显示方式――同时决定其处理的消息 

的不同。选择Verical时,控件按上下方式显示,而当选择 

Horizontal (UDS_HORZ)时,它按水平方式显示。域Alignment则决 

定上下控件的关联窗口的布置方式。它可以为下列值之一:  



                                    



               图5。 31 上下控件的风格设定  



Unattached (default):此为域缺省值,表明上下控件与其关联控 

件之间没有什么特定的要求。  



Left (UDS_ALIGNLEFT):此时上下控件的关联控件的位置被指定为 

在上下控件的右边,同时,其关联控件的大小被调整到与其关联的上 

下控件等高。  



Right (UDS_ALIGNRIGHT ):   此时上下控件的关联控件的位置被指定 

为在上下控件的左边,同时,其关联控件的大小被调整到与其关联的 

上下控件等高。  



选项Auto   buddy (UDS_AUTOBUDDY)对程序控制影响较大。当该选项 

被选择时,系统自动设定该上下控件的关联窗口,同时,自动在该关 

联窗口中显示其所联系的上下控件位置值。(因此,该关联窗口一般 

为一编辑框或静态文本控件。)也就是说,设定该值后,上下控件的 

关联窗口的行为管理是自动的,在指定了上下控件的关联窗口后,就 

不再需要对其行为控制添加另外的代码。而当没有设定该风格时,我 

们必须为该控件的行为编写独立的代码:要考虑编辑框中值的显示, 


…………………………………………………………Page 288……………………………………………………………

要考虑刷新静态文本控件的内容。我们认为,如果仅仅是简单的利用 

上下控件的位置信息,一般设为自动处理方式就相当合适了。当然, 

如果程序员希望在其中处理一些额外的动作,就不得不动动脑筋考虑 

一下其实现方法了。  



选项Set buddy integer (UDS_SETBUDDYINT)则决定了上下控件位置 

改变时的消息发送。设置该选项时,上下控件的位置改变是,向其关 

联窗口发送消息WM_SETTEXT,同时,上下控件的位置以十进制或十六 

进制格式发出。  



选项No   thousands(UDS_NOTHOUSANDS)被设置时,在数的每三位中, 

不插入一个起分隔作用的千位分隔符。  



选项Wrap (UDS_WRAP )决定当上下控件的选择位置超过极限位置时的 

处理方式:当该选项被设置时,当上下控件的位置达到其最大或最小 

位置后,用户试图再增大或减小该值时,上下控件的值变为最小或最 

大。否则,上下控件的值只是简单的保持不变。  



选项Arrow   keys (UDS_ARROWKEYS)被设置时,当按下向上或向下方 

向箭头时,控制增加或减小其位置。  



上下控件的扩展风格的设定与其它控件的设定没有什么大的改变,这 

里不再详述。  



下面,我们看一下上下控件的关联窗口的指定及其行为管理的实现。  



首先,我们看看当上下控件的Auto        buddy风格被设定的情况下的管 

理。  



我们先指定上下控件的关联窗口。这需要用到函数SetBuddy:  



CWnd* SetBuddy( CWnd* pWndBuddy );  



该函数的唯一一个参数为一指向上下控件的关联窗口的指针,其返回 

值为一指向  



该上下控件原来的关联窗口的指针。  



  l 注意:  



  l 在程序中,一般应先指定上下控件的变动范围SetRange:  



  l void SetRange( int nLower; int nUpper );  


…………………………………………………………Page 289……………………………………………………………

        该函数的两个参数分别指定了上下控件的最小及最大变动 

        值。  



以后我们不再需要为上下控件的关联窗口的行为编写任何代码。系统 

会为我们作好所有的规范化的工作:上下控件的位置改变时,其变化 

直接反应在与其关联的窗口中――该窗口中会以十进制或十六进制数 

的形式来反应上下控件此时的位置信息。  



当我们不设定该风格的时候,情况发生了变化。范围及关联窗口的设 

定同上文没有什么差别。但现在,当上下控件的位置发生变化时,虽 

然上下控件会发送消息反应这一变化,但其关联窗口的行为需要我们 

编写代码来实现。当上下控件发生的位置与其前一位置不一样时,它 

发送消息ON_WM_HSCROLL (ON_WM_VSCROLL)来反应这一变化。在程序 

接收到该消息后,经过适当的处理,就可以自己对该消息作出反应了 

 (当然,如果你愿意,你也可以什么事也不做)。  



下面为一段关于上下控件的关联窗口控制的代码。  



// 。。。  



m_Spin2。SetRange(0;(sizeof(szColors)/sizeof(szColors'0'))…1);  



m_Spin2。SetPos(0);  



m_Spin2。SetBuddy(&m_Buddy2);  



m_Spin2。SetWindowText(szColors'0');  



// 。。。  



void CSpinBoxDlg::OnHScroll(UINT nSBCode; UINT nPos; CScrollBar* pScrollBar)   



{  



// TODO: Add your message handler code here and/or call default  



CSpinButtonCtrl *pSpin=(CSpinButtonCtrl *)pScrollBar;  



if(pSpin==&m_Spin2)  



m_Buddy2。SetWindowText(szColors'pSpin…》GetPos()');  



CDialog::OnHScroll(nSBCode; nPos; pScrollBar);  



}  



第一段代码设定了上下控件的范围,关联窗口,位置,并初始化了编 


…………………………………………………………Page 290……………………………………………………………

辑框中的显示。  



第二段中的函数处理了消息ON_WM_HSCROLL,并利用上下控件的位置 

对其关联窗口的显示进行了改变。语句  



CSpinButtonCtrl *pSpin=(CSpinButtonCtrl *)pScrollBar;  



将该消息的最后一个参数进行转换,以便确定是否该消息是我们所关 

心的上下控件发出的。接下来用语句  



if(pSpin==&m_Spin2)  



进行判断。在确知该消息是由特定的上下控件发出的后,语句  



m_Buddy2。SetWindowText(szColors'pSpin…》GetPos()');  



对编辑框中的文本进行了更新。先用上下控件的成员函数GetPos取得 

其位置,然后用函数SetWindowText重新设定编辑框中的文本 

 (szColors' '为预先设定的一枚举数组)。  



    



  l 注意:  



  l 以上设定范围、关联窗口、位置 (还有没有在上文提到的加速设 

   置)动作,都有相应的获取函数 :例如GetBuddy函数对应于 

   SetBuddy等。读者有兴趣可以参考系统的技术支持部分。  


…………………………………………………………Page 291……………………………………………………………

         第六章 使用Windows标准控件  



我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对 

话框或其它窗口中充当与用户交互的元素。在Visual  C++中,可以使 

用的控件分成三类:  



   (1) Windows标准控件  



Windows标准控件由Windows操作系统提供,在Windows  95中还提供了 

一些新增的控件。所有这些控件对象都是可编程的,我们可以使用 

Visual   C++提供的对话框编辑器把它们添加到对话框中。Microsoft 

基础类库 (MFC)提供了封装这些控件的类,它们列于表6。1。  



                   表6。1 Windows标准控件  



        控件     MFC类       描述  



        动画     CAnimateCtrl  显示连续的AVI视频剪辑  



        按钮     CButton    用来产生某种行为的按钮,以及 

                          复选框、单选钮和组框  



        组合框    CboBox  编辑框和列表框的组合  



        编辑框    CEdit      用于键入文本  



        标题头    CHeaderCtrl  位于某一行文本之上的按钮,可 

                          用来控制显示文件的宽度  



        热键     CHotKeyCtrl  用于通过按下某一组合键来很快 

                          的执行某些常用的操作  



        图象列表   CImageList  一系列图象(典型情况下是一系 

                          列图标或位图)的集合。图象列 

                          表本身不是一种控件,它常常是 

                          和其它控件一起工作,为其它控 

                          件提供所用的图象列表  



        列表     CListCtrl  显示文本及其图标列表的窗口  



        列表框    CListBox   包括一系列字符串的列表  



        进度     CProgressCtrl  用于在一较长操作中提示用户所 

                          完成的进度  



        多格式文   CRichEditCtrl  提供可设置字符和段落格式的文 

        本编辑               本编辑的窗口  


…………………………………………………………Page 292……………………………………………………………

         滚动条      CScrollBar   为对话框提供控件形式的滚动条  



         滑块       CSliderCtrl  包括一个有可选标记的滑块的窗 

                               口  



         旋转按钮     CSpinButtonCtrl  提供一对可用于增减某个值的箭 

                               头  



         静态文本     CStatic      常用于为其它控件提供标签  



         状态条      CStatusBarCtrl   用于显示状态信息的窗口,同 

                               MFC类CStatusBar类似  



                                                        续表6。1 



         控件        MFC类       描述  



         选项卡       CTabCtrl   在选项卡对话框或属性页中提供 

                              具有类似笔记本中使用的分隔标 

                              签的外观的选项卡  



         工具条       CToolBarCtrl  具有一系列命令生成按钮的窗 

                              口,同MFC类CToolBar类似  



         工具提示      CToolTipCtrl  一个小的弹出式窗口,用于提供 

                              对工具条按钮或其它控件功能的 

                              简单描述  



         树         CTreeCtrl  用于显示一系列的项的继承结构  



前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它 

也是所有控件类的基类。Windows标准控件在以下环境下提供:  



  l Windows 95  



  l Windows NT 3。51及以后版本  



  l Win32s 1。3  



  l 注意:  



  l Visual C++ 4。2及以后版本不再支持Win32s。  



    



    (2) ActiveX控件  


…………………………………………………………Page 293……………………………………………………………

ActiveX控件可用于对话框中,也可用于HTML文档中。这种控件过去 

被称为OLE控件。本书将在专门的章节中来讲述关于ActiveX控件的知 

识。这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实 

现方法。  



   (3) 其它MFC控件类  



除了Windows标准控件和自己编写的或者来自于第三方软件开发商的 

ActiveX控件以外,MFC还提供了另外三种控件,它们由下面的三个类 

进行封装:  



  l 类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多 

   可以包括四个位图图片,分别代表按钮的四种不同状态。  



  l 类CCheckListBox用于创建选择列表框,这种列表框中的每一项前 

   面有一个复选框,以决定该项是否被选中。  



  l 类CDragListBox用于创建一种特殊的列表框,这种列表框允许用 

   户移动列表项。  



在本章我们仅讲述第一类控件,即Windows标准控件。所涉及的内容 

包括各个控件的使用及相应的技巧。  



        第一节 使用对话框编辑器和ClassWizard  



对于大多数Windows标准控件,我们一般都使用对话框编辑器来将它 

们添加到对话框中。  



                                   



              图6。 1 在ResourceView中选择对话框  

                  IDD_DIALOGDEMO_DIALOG  


…………………………………………………………Page 294……………………………………………………………

                                        
返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!