八宝书库 > 文学其他电子书 > C语言实例教程(PDF格式) >

第38部分

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

小说: C语言实例教程(PDF格式) 字数: 每页4000字

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




基础类库 (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……………………………………………………………

                                         



                 图6。 2 控件的Properties对话框  



                             



              图6。 3 对话框编辑器的Controls工具窗口  



在下面的过程中,我们将一个编辑框控件添加到在第四章创建的基于 

对话框的MFC框架应用程序的主对话框窗口中。  



1。   首先,在Workspace窗口的ResourceView选项内双击DialogDemo  

resourcesDialog节点下的IDD_DIALOGDEMO_DIALOG图标。上面的操 

作如图所示。  



2。   用鼠标选中标有 “要做……”的静态文本控件。右击鼠标,从上 

下文菜单中选择Properties,打开如图6。2所示的对话框,在Caption 

文本框中输入新的控件文本: “在下面的文本框中输入一些字符”, 

然后将静态文本控件拖动到对话框的左上角。  



3。   从Controls工具窗口(如图6。3所示,如果在你的资源编辑器中看 

不到该工具窗口,可以在工具条上右击鼠标,从上下文菜单中选择 

Controls)中选择编辑控件图标       ,在对话框中绘制一个编辑框控 

件,如图6。4所示。  



在该编辑框控件的Properties窗口的General选项卡中输入其ID为 

IDC_EDIT。然后在Styles选项卡下将Multiline复选框划上勾,并消 

除Auto HScroll复选框前的勾。  



4。  右击该编辑框控件,从上下文菜单中选择ClassWizard命令,打开 

ClassWizard对话框,该对话框看起来如图6。5所示。  


…………………………………………………………Page 295……………………………………………………………

                                      



                图6。 4 向对话框中添加一个编辑框控件  



                                                   



                    图6。 5 ClassWizard对话框  



单击Member             Variables选项卡,确信在Project处选择了 

DialogDemo,在Class  name处选择了CDialogDemoDlg。现在我们为刚 

才添加的编辑框控件IDC_EDIT添加一个数据映射入口。在Control  

IDs处选择IDC_EDIT,单击右边的Add  Viable按钮。打开如图6。6所示 

的对话框。  



在Member variable name处链接变量名m_strEdit  (这里m表示该变量 

为类CDialogDemoDlg的一个成员变量,str表明其类型为字符串,即 

类CString),在Category下拉列表中选择Value              (另一种选择是 

Control,两种选择的不同将在后面的内容中讲述),在Variable  

type下拉列表中选择CString        (还有其它很多数据类型可供选择,但 

由于这里编辑框中的内容为一字符串,因此CString是最恰当的选 

择)。单击OK关闭对话框。  


…………………………………………………………Page 296……………………………………………………………

                                                 



                     图6。 6 为控件映射添加成员变量  



5。    检查一下现在的ClassWizard对话框 (图6。7)与图6。5相比有何不 

同。在图6。7所示的对话框中下方的Maximum   characters文本框中输 

入50。由字面意思可以很容易猜出其含义,即将编辑框IDC_EDIT中可 

能的最长字符串的大小限制为50。单击OK关闭对话框。  



                                                           



                  图6。 7 使用ClassWizard设置数据验证方案  



6。          从Workspace窗口的ClassView中双击类CDialogDemoDlg的 

OnInitDialog成员函数,使用下面的代码来代替位于语句  



return TRUE;  



前的// TODO注释:  



m_strEdit=〃您好! 请在这里输入一些字符串。〃;  



UpdateData(FALSE);  


…………………………………………………………Page 297……………………………………………………………

7。  在ClassView中双击类CDialogDemoApp的InitInstance成员函数, 

使用下面的代码来找替位于选择支  



if (nResponse == IDOK)  



下的//TODO注释:  



AfxMessageBox(dlg。m_strEdit);  



然后将同一成员函数中的下面的代码行删掉 (或注释掉):  



m_pMainWnd = &dlg;  



8。 编译并运行该应用程序。显示如图6。8所示的对话框。  



                                     



                图6。 8 示例程序DialogDemo的运行结果  



在图6。8所示的文本框中输入一些字符,单击 “确定”。随即弹出如 

图6。9所示的消息框。该消息框复述了用户在图6。8所示的对话框中的 

输入。我们还发现,在图6。8所示的对话框中,当输入字符串达到一 

定的长度之后,我们不可以再输入更多的字符,这是我们在前面设置 

了Maximum characters为50的结果。  



                                       



               图6。 9 以消息框的形式反馈输入的字符串  



下面我们来看在上面的步骤中都完成了什么。首先我们使用资源编辑 

器向对话框模板中添加这些标准控件,这一步的概念很清晰,因此并 

不难理解。  



然后,我们打开了所绘制的编辑框的Properties               (属性)对话框。先 

将其控件ID设置为IDC_EDIT。这时如果打开头文件Resource。h,就会 

发现宏IDC_EDIT被定义为常量1001。不过,事实上在很多情况下我们 

并不需要关心每一控件的ID的具体值,而只需要记住相应的助记符。 

对于这里的编辑框控件,我们只需要记住IDC_EDIT即可,而不需要关 


…………………………………………………………Page 298……………………………………………………………

心它等于1001。接着,我们在Styles选项卡中设置了Multiline属 

性,同时清除了Auto        HScroll属性,两者共同作用使用得编辑框 

IDC_EDIT支持多行文本,并且如文本行的长度超过编辑框宽度时自动 

回行。  



下面的步骤是最重要的一步,我们动用了功能强大的工具 

ClassWizard。首先,我们将编辑框与一个CString对象相关联,这使 

用了一种被称为Dialog  Data  Exchange  (DDX)的机制。在这种机制 

中,我们先在处理函数OnInitDialog或对话框类的构造函数中对对话 

框对象的成员变量进行初始化,在对话框显示之前,框架的DDX机制 

将成员变量的值传递给对话框中的控件。这个过程在成员函数 

DoModal或Create被调用的过程中发生。类CDialog中对OnInitDialog 

成员函数的默认实现调用了类CWnd成员函数UpdateData来初始化对话 

框中的控件。这时我们就可以看到前面的第6步还可在具有下面的几 

种变通方案:  



1。 将代码行  



m_strEdit=〃您好! 请在这里输入一些字符串。〃;  



移到对基类的OnInitDialog成员函数的调用之前,即位于下面的代码 

之前:  



CDialog::OnInitDialog();  



2。 将代码  



m_strEdit=〃您好! 请在这里输入一些字符串。〃;  



移到类CDialogDemoDlg的构造函数中。  



对于上面的两种方法,与前面第6步中使用的方法相比,我们没有必 

要调用类CWnd的成员函数UpdateData。因为该函数在类CDialog的成 

员函数OnInitDialog中将被调用。  



这三种方法之间并没有明确的优劣之分,在很多情况下,它们分别适 

用于不同的场合。  



这里我们说一下成员函数UpdateData。该函数带有一个布尔类型的参 

数,如果该参数为FALSE,函数UpdateData将成员变量的值传递给对 

话框的变量;而如果该参数为TRUE,函数UpdateData将进行相反的过 

程。  


…………………………………………………………Page 299……………………………………………………………

如果用户单击了对话框中ID为IDOK的按钮,或者以TRUE为参数调用函 

数UpdateDat

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的