VisualC面向对象编程教程第9章对话框高级编程_第1页
VisualC面向对象编程教程第9章对话框高级编程_第2页
VisualC面向对象编程教程第9章对话框高级编程_第3页
VisualC面向对象编程教程第9章对话框高级编程_第4页
VisualC面向对象编程教程第9章对话框高级编程_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、VisualC面向对象编程教程第9章对 话框高级编程 第9章 对话框高级编程 版权所有版权所有 复制必究复制必究 l模态对话框在关闭之前,不允许用户切换到程序 的其它窗口。因为当弹出模态对话框时,它就获 得了程序的控制权,并且,模态对话框拥有自己 的消息循环,因此其窗口中所有产生的消息都不 会送到主窗口的消息循环。 l非模态对话框弹出后,用户不需要关闭它就可以 在非模态对话框和应用程序其它窗口之间进行切 换。常用的Find查找和Replace替换对话框就是非 模态对话框。如果关闭非模态对话框的父窗口, 非模态对话框一般也自动关闭。 l对于非模态对话框,使用对话框编辑器创建对话 框资源和使用Cl

2、assWizard类向导添加对话框类、 成员变量和消息处理函数的方法与模态对话框一 样,但创建和退出对话框的方式有所不同。 l创建模态对话框时是由系统自动分配内存空间, 因 此 在 退 出 对 话 框 时 , 系 统 自 动 调 用 CDialog:EndDialog()函数来删除对话框。而创建 非模态对话框则需要用户来分配内存,退出时还 需用户自己删除非模态对话框。 l非模态对话框的实例应声明为全局对象,不能象 模态对话框那样作为局部对象。一般用new操作 符生成,使用结束时用delete操作符将其删除。 l区别于模态对话框,非模态对话框用new生成对 象后,不是调用CDialog:DoMo

3、dal()函数,而是调 用CDialog:Create()函数装入对话框资源,并创建 和显示对话框。 lCreate()函数在显示非模态对话框后就立即返回, 而DoModal()函数是在模态对话框被关闭之后才返 回。并且,由于Create()函数不会启动新的消息循 环,非模态对话框与应用程序共用一个消息循环, 这样,非模态对话框就不会垄断用户的输入。 lWindows将一些常用的对话框集成到操作系统中, 作为Windows通用对话框库Commdlg.dll的一部分。 用户在程序中可以直接使用这些通用对话框,不 必再创建对话框资源和对话框类,减少了大量的 编程工作。并且,用户还可以定制通用对话框

4、的 外观和性能。 l为了在MFC应用程序中使用通用对话框,MFC提 供了封装这些通用对话框的类。这些通用对话框 类都是从CCommonDialog类派生而来,而 CCommonDialog类又是CDialog类的派生类。 通用对话框通用对话框 MFC通用对话框类通用对话框类 CColorDialog C CFindReplaceDialog CFontDialog CPagesSetupDialog CPrintDialog COleDialog 说说 明明 颜色设定对话框,选择不同的颜色 文件存取对话框,打开或保存文件 查找和替换对话框,查找和替换文本串 字体设定对话框,选择不同的字体。 页

5、面设置对话框,设置页码、页眉等 标准的打印对话框,用于打印和打印设置 该类及其派生类用于生成OLE对话框 l在Window 95推出之前,只提供了静态文本、按 钮、编辑框、列表框和组合框等标准控件。在推 出Window 95时,将其中一些较为流行的控件作 为公共控件引入到Windows中,如旋转按钮、进 度条、滑块、列表视控件、树视控件、日期时间 选取器等公共控件。 l标准控件保存在System目录下的User.exe文件中, 公共控件保存在System目录下的Comctl32.dll中文 件。MFC对这些公共控件以类的形式进行了封装, 如CProgressCtrl、CListCtrl和CTr

6、eeCtrl等。 l旋转旋转(Spin)按钮控件也称微调控件或上下控件, 其形状与滚动条类似,两端也有两个箭头按钮, 但中间没有滚动块。用户单击箭头按钮可以增加 或减少一个数值,这个值表示旋转按钮滚动位置 或另一个与旋转按钮相关联的控件中的数据。 l当程序需要用户在某个范围内输入一个值时可以 使用旋转按钮,其好处是无需当心用户输入一个 无效值而导致程序的崩溃。 l旋转按钮控件经常和一个关联控件(如编辑框) 绑定在一起使用,用户只需用鼠标单击旋转按钮 控件的上下箭头,就能设置关联控件中的数据内 容。对用户而言,一个旋转按钮和它的关联控件 看起来就象一个控件。 l可以在程序中通过调用成员函数设置关

7、联控件, 但常用的方法是通过控件Properties对话框直接设 置关联控件。 l在Alignment下拉框设置旋转按钮与关联控件的位 置关系,Right和Lift分别表示旋转按钮紧靠在关 联控件窗口的右内侧或左内侧,Unattached表示旋 转按钮的位置与关联控件无关;属性Auto buddy 表示旋转按钮把它前一个控件(按TabOrder顺序) 作为关联控件;属性Set buddy integer表示单击旋 转按钮改变位置时,关联控件窗口能自动显示这 个位置值。 l在控件Properties属性对话框的Orientation下拉框中 设置垂直(Vertical)或水平(Horizonta

8、l)方向两 种风格;Wrapt表示当旋转按钮达到最大(最小) 值时重新回绕到最小(最大)值;No thousands表 示取消显示数值中的千分位分隔符;Arrow keys表 示可以使用键盘“”和“”键改变控件位置值。 l对 旋 转 按 钮 的 操 作 通 过 调 用 M F C 类 CSpinButtonCtrl的成员函数来完成,主要成员函数 有:SetRange()和GetRange()用于设置或获得旋转 按钮的上下限范围,SetPos()和GetPos()用于设置 或获得旋转按钮的当前位置值,函数SetBuddy()用 于动态设置关联控件,函数GetBuddy()用于获得关 联控件窗口的

9、指针。 l滑块滑块(Slider)控件也称滑动条或游标控件,它由 滑杠、可沿着滑杠方向移动的滑块和可选择刻度 的标尺组成。用户可以通过鼠标或键盘移动滑块, 滑块不同的位置代表了一个不同的数值。 l与滚动条相比,滑块控件中间只有一个滑块,两 端箭头按钮。与旋转按钮相比,滑块控件比旋转 按钮控件更具独立性,一般不需要关联控件。 l滑块控件的属性:Orientation下拉框设置滑块控件 的垂直(Vertical)或水平(Horizontal)方向风格。 Point设置刻度标尺的位置,Both表示滑块是一个 矩形块,Top/Left表示标尺位于滑杆的左边或上方, Bottom/Right表示标尺位于

10、滑杆的右边或下方。 l当滑动滑块时,滑块控件将发送滚动消息来通知 父窗口,垂直滑块发送消息WM_VSCROLL,水 平滑块发送WM_HSCROLL。 l可调用封装滑块控件的MFC类CSliderCtrl的成员函 数设置滑块的最小、最大值、刻度出现的疏密、 行和页间距。如:GetLineSize()、SetLineSize()、 GetPageSize()、SetPageSize()、GetRange()、Set- Range()、GetPos()、SetPos()等。 l进度条进度条(Progress)是一个在进行一系列费时操作 时显示反馈信息的控件,通过其状态的动态变化 告诉用户当前的操作进

11、度。进度条也能表示某个 范围内的值,如温度、水平面高度以及音响系统 频率的模拟显示。 l形状上看,进度条由一个细长的矩形窗口和一些 填充块组成,其中的填充块越多,表示任务越接 近于完成,当蓝色块填满时,任务也就完成了。 l我们一般使用进度条的默认属性,其常用的属性 有:Border表示进度条有一个边框;Vertical表示 垂直进度条;Smooth表示使用不间断的蓝色条填 充控件窗口。 l进度条控件也有一个“范围”和“当前位置”, 范围表示整个操作需要完成的工作量,当前位置 表明该操作已完成了多少。初始化时只需设置进 度条值的范围、当前值和使用步长。 l进度条控件用于输出,一般不需要进行消息处

12、理。 l为了设置和获得进度条有关参数,需要调用封装 进度条控件MFC类CProgressCtrl的有关成员函数。 函数SetRange()或GetRange()用于设置或获取控件 值的范围,函数SetPos()和GetPos()用于设置或获 取控件的当前位置,函数SetStep()用于设置步长, 函数StepIt()用于在控件窗口填充一个蓝色块。 1. 标签(标签(Tab)控件控件 l标签(Tab)控件也称选项卡控件,它是一个分割 成多个页面的窗口,每个页面都配有一个带有标 题的标签,单击一个标签就显示对应的页面。 l标签控件在功能上等价一系列对话框窗口,但使 用起来更接近于我们的使用习惯。编

13、程时使用标 签控件,可以在一个窗口的相同区域内定义多个 页面,其中每个页面(可以是一个对话框)上包 括一些不同的控件,以实现不同的对话功能。 l标签作为控件使用,它不是对话框,编程时不能 直接在各个标签页上添加控件,只能在选中不同 标签时在相同位置显示含有不同控件的对话框。 l标签控件的属性有:Alignment下列框用于设置每 个标签的宽度为自动随标题长度调节(Right Justify) 或固定宽度(Fixed Width0,Buttons表示标签采用 按钮形状,Multiline表示标签可以多行的形式显示, Bottom表示标签位于控件的底端,Vertical表示标 签以垂直的方式出现。

14、 l标签控件消息:单击标签时发送消息NM_CLICK。 选择不同标签时发送消息TCN_SELCHANGING (标签切换前)或TCN_SELCHANGE(标签切换后)。 lMFC类CTabCtrl提供了标签控件的各项服务功能, 通过其成员函数实现了对控件及其数据结构进行 操作的方法。编程时常用的成员函数有:函数 InsertItem()或DeleteItem()用于插入或删除一个标 签,函数GetCurlSel()或SetCurSel()用于获取所选 择标签的索引号或设置当前标签。 l在CTabCtrl类的很多成员函数中都用到一个 TCITEM结构(取代了TC_ITEM结构)的参数, 该结构用

15、于设置每一个标签的属性, 2. 属性表(属性表(Property sheet) l属性表属性表(Property sheet)又称属性对话框,其形 式和功能都类似于前面介绍的标签对话框。一个 属性表由一个CPropertySheet类对象和多个 CPropertyPage类对象构成,CPropertySheet类或其 派生类对象代表一个属性表,CPropertyPage派生 类对象代表每个不同的属性页。 l虽然CPropertySheet派生于CWnd,但属性表的使 用方法与CDialog类似,即先调用构造函数创建属 性表,然后调用CPropertySheet:AddPage()函数将 属性页

16、加入属性表中,最后调用CPropertySheet: DoModal()创建一个模态属性表,或调用 CPropertySheet:Create()函数创建非模态属性表。 l一个属性页对应一个对话框,用于进行数据的输 入和输出。CPropertyPage类派生于CDialog类,因 此,每个属性页实际上就是一个对话框。我们可 以利用对话框编辑器为每个属性页添加控件,并 可利用ClassWizard创建自己的派生类,添加与控 件关联的成员变量和消息处理函数。 例例 利用属性表实现与前例相同的功能。 l图像列表图像列表(Image list)是一个由一些大小相同的 图像(如图标或位图)组成的集合,如

17、图所示。 图像列表本身只是一种存储结构,这种存储结构 与数组极为相似,存储在图像列表中的每个图像 通过一个索引值识别。 l图像列表不是控件,没有对应的控件窗口,我们 不能直接看见它,但可利用MFC图像列表类或图 像列表的关联控件来显示图像列表中的图像。 l图像列表由MFC类CImageList支持。CImageList类 提供了创建、显示和管理图像列表的方法,调用 CImageList类的成员函数Create()创建图像列表, 调用函数Add()或Remove()向图像列表中添加或删 除一个图像,调用函数GetImageCount()获得图像 列表中图像个数,调用函数Draw()绘制图像。 l

18、编程时可以直接使用图像列表,但图像列表最主 要的用途还是作为与其相关联控件的显示项的图 形标志,如图片控件、列表视控件、树视控件、 扩展组合框、标签控件和属性页等。 l列表视列表视(List view)控件也称列表控件,在需要以报 表形式显示数据时,列表视控件是最好的选择。 区别于列表框,列表视控件可显示由多个子项组 成的项目,并允许以多种方式显示信息。列表视 控件还可以为显示的项目增加一个图标,但代表 项目的图标必须存储在一个图像列表中。 l列表视控件包含一个项目列表,而其中每一个项 目由图标、项目名称(主项)和多个子项组成, 每个项目所包含子项的数目必须相同,属性相同 的每个子项显示在同一

19、列中。列表视控件有两个 重要的数据结构LVCOLUMN和LVITEM。 列表视控件的属性一般使用其默认值,其常用 的属性有:View指定程序运行后列表视控件最初显 示的方式,可设置为Icon(大图标)、Small Icon (小图标)、List(列表)或Report(报表); Single selection 表示每次只能选中一个项;Auto arrange使得项目在Icon和Small Icon显示方式下能够 自动排列整齐;Edit Labels表示可以编辑项目的卷标, 即主项(第0列)的文本,这时需要添加控件通知消 息LVN_ENDLABELEDIT的处理函数;No column head

20、er取消控件所有列的标题。 列表视控件有多种显示形式,其细节由控件本 身实现的。MFC提供了CListCtrl类用于实现列表视 控件的各种功能,如对项目进行添加、删除、修改 和检索等。主要成员函数:InsertItem()或DeleteItem() 插入或删除一个主项,GetItemText()或SetItemText() 获得或添加子项文本;GetItemCount()获取项目的总 数(行数);FindItem()查找具有某些特征的项目; GetNextItem()查找并返回某些项目的索引,常用于 查找当前选择的项目;SetImageList()把图像列表与 列表视控件关联;InsertColumn()或DeleteColumn() 插入或删除一个列。 l树视树视(Tree view)控件也称树控件,用于表示有 层次关系的事物或能够进行分类划分的对象。 l树视图控件中每个项目由项目名称和一个可选择 的图标组成,项目分为父项目和子项目,一个父 项目拥有一个子项目列表,双击父项目可以展开 或折叠其中的子项目。父项目位于子项目的上一 层,子项目又可以是低一层子项目的父项目。 l树视控件编程时常用到的数据结构:TVITEM结 构和TVINSERTSTRCT结构。TVITEM结构用于 定义项目,TVINS

温馨提示

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

评论

0/150

提交评论