VisualC面向对象编程教程第9章对话框高级编程.ppt
《VisualC面向对象编程教程第9章对话框高级编程.ppt》由会员分享,可在线阅读,更多相关《VisualC面向对象编程教程第9章对话框高级编程.ppt(34页珍藏版)》请在三一办公上搜索。
1、第9章 对话框高级编程,版权所有 复制必究,模态对话框在关闭之前,不允许用户切换到程序的其它窗口。因为当弹出模态对话框时,它就获得了程序的控制权,并且,模态对话框拥有自己的消息循环,因此其窗口中所有产生的消息都不会送到主窗口的消息循环。非模态对话框弹出后,用户不需要关闭它就可以在非模态对话框和应用程序其它窗口之间进行切换。常用的Find查找和Replace替换对话框就是非模态对话框。如果关闭非模态对话框的父窗口,非模态对话框一般也自动关闭。,9.1 非模态对话框,对于非模态对话框,使用对话框编辑器创建对话框资源和使用ClassWizard类向导添加对话框类、成员变量和消息处理函数的方法与模态对
2、话框一样,但创建和退出对话框的方式有所不同。创建模态对话框时是由系统自动分配内存空间,因此在退出对话框时,系统自动调用CDialog:EndDialog()函数来删除对话框。而创建非模态对话框则需要用户来分配内存,退出时还需用户自己删除非模态对话框。,非模态对话框的创建,非模态对话框的实例应声明为全局对象,不能象模态对话框那样作为局部对象。一般用new操作符生成,使用结束时用delete操作符将其删除。区别于模态对话框,非模态对话框用new生成对象后,不是调用CDialog:DoModal()函数,而是调用CDialog:Create()函数装入对话框资源,并创建和显示对话框。Create()
3、函数在显示非模态对话框后就立即返回,而DoModal()函数是在模态对话框被关闭之后才返回。并且,由于Create()函数不会启动新的消息循环,非模态对话框与应用程序共用一个消息循环,这样,非模态对话框就不会垄断用户的输入。,Windows将一些常用的对话框集成到操作系统中,作为Windows通用对话框库Commdlg.dll的一部分。用户在程序中可以直接使用这些通用对话框,不必再创建对话框资源和对话框类,减少了大量的编程工作。并且,用户还可以定制通用对话框的外观和性能。为了在MFC应用程序中使用通用对话框,MFC提供了封装这些通用对话框的类。这些通用对话框类都是从CCommonDialog类
4、派生而来,而CCommonDialog类又是CDialog类的派生类。,9.2 通用对话框,通用对话框,9.3 公共控件,在Window 95推出之前,只提供了静态文本、按钮、编辑框、列表框和组合框等标准控件。在推出Window 95时,将其中一些较为流行的控件作为公共控件引入到Windows中,如旋转按钮、进度条、滑块、列表视控件、树视控件、日期时间选取器等公共控件。标准控件保存在System目录下的User.exe文件中,公共控件保存在System目录下的Comctl32.dll中文件。MFC对这些公共控件以类的形式进行了封装,如CProgressCtrl、CListCtrl和CTreeC
5、trl等。,9.3.1 旋转按钮,旋转(Spin)按钮控件也称微调控件或上下控件,其形状与滚动条类似,两端也有两个箭头按钮,但中间没有滚动块。用户单击箭头按钮可以增加或减少一个数值,这个值表示旋转按钮滚动位置或另一个与旋转按钮相关联的控件中的数据。当程序需要用户在某个范围内输入一个值时可以使用旋转按钮,其好处是无需当心用户输入一个无效值而导致程序的崩溃。旋转按钮控件经常和一个关联控件(如编辑框)绑定在一起使用,用户只需用鼠标单击旋转按钮控件的上下箭头,就能设置关联控件中的数据内容。对用户而言,一个旋转按钮和它的关联控件看起来就象一个控件。,关联控件的设置:,可以在程序中通过调用成员函数设置关联
6、控件,但常用的方法是通过控件Properties对话框直接设置关联控件。在Alignment下拉框设置旋转按钮与关联控件的位置关系,Right和Lift分别表示旋转按钮紧靠在关联控件窗口的右内侧或左内侧,Unattached表示旋转按钮的位置与关联控件无关;属性Auto buddy表示旋转按钮把它前一个控件(按TabOrder顺序)作为关联控件;属性Set buddy integer表示单击旋转按钮改变位置时,关联控件窗口能自动显示这个位置值。,旋转按钮的属性和操作:,在控件Properties属性对话框的Orientation下拉框中设置垂直(Vertical)或水平(Horizontal)
7、方向两种风格;Wrapt表示当旋转按钮达到最大(最小)值时重新回绕到最小(最大)值;No thousands表示取消显示数值中的千分位分隔符;Arrow keys表示可以使用键盘“”和“”键改变控件位置值。对旋转按钮的操作通过调用MFC类CSpinButtonCtrl的成员函数来完成,主要成员函数有:SetRange()和GetRange()用于设置或获得旋转按钮的上下限范围,SetPos()和GetPos()用于设置或获得旋转按钮的当前位置值,函数SetBuddy()用于动态设置关联控件,函数GetBuddy()用于获得关联控件窗口的指针。,例 编写一个单文档应用程序ExmpComctl,执
8、行“测试控件|公共控件”菜单命令打开一个对话框,对话框有一个带旋转按钮的编辑框,用于输入圆周线的宽度。单击旋转按钮,在编辑框显示旋转按钮所表示的线宽。单击OK按钮,程序根据线宽在用户视图区画一个圆。,9.3.2 滑块,滑块(Slider)控件也称滑动条或游标控件,它由滑杠、可沿着滑杠方向移动的滑块和可选择刻度的标尺组成。用户可以通过鼠标或键盘移动滑块,滑块不同的位置代表了一个不同的数值。与滚动条相比,滑块控件中间只有一个滑块,两端箭头按钮。与旋转按钮相比,滑块控件比旋转按钮控件更具独立性,一般不需要关联控件。滑块控件的属性:Orientation下拉框设置滑块控件的垂直(Vertical)或水
9、平(Horizontal)方向风格。Point设置刻度标尺的位置,Both表示滑块是一个矩形块,Top/Left表示标尺位于滑杆的左边或上方,Bottom/Right表示标尺位于滑杆的右边或下方。,滑块控件发送的消息和操作:,当滑动滑块时,滑块控件将发送滚动消息来通知父窗口,垂直滑块发送消息WM_VSCROLL,水平滑块发送WM_HSCROLL。可调用封装滑块控件的MFC类CSliderCtrl的成员函数设置滑块的最小、最大值、刻度出现的疏密、行和页间距。如:GetLineSize()、SetLineSize()、GetPageSize()、SetPageSize()、GetRange()、S
10、et-Range()、GetPos()、SetPos()等。,例 完善例7-10a中的应用程序ExmpComctl,向对话框资源添加一个滑块控件,用于设置圆的半径。在对话框中单击OK按钮,程序根据设置的线宽和半径在用户视图区画一个圆。,9.3.3 进度条,进度条(Progress)是一个在进行一系列费时操作时显示反馈信息的控件,通过其状态的动态变化告诉用户当前的操作进度。进度条也能表示某个范围内的值,如温度、水平面高度以及音响系统频率的模拟显示。形状上看,进度条由一个细长的矩形窗口和一些填充块组成,其中的填充块越多,表示任务越接近于完成,当蓝色块填满时,任务也就完成了。我们一般使用进度条的默认
11、属性,其常用的属性有:Border表示进度条有一个边框;Vertical表示垂直进度条;Smooth表示使用不间断的蓝色条填充控件窗口。,进度条控件的操作:,进度条控件也有一个“范围”和“当前位置”,范围表示整个操作需要完成的工作量,当前位置表明该操作已完成了多少。初始化时只需设置进度条值的范围、当前值和使用步长。进度条控件用于输出,一般不需要进行消息处理。为了设置和获得进度条有关参数,需要调用封装进度条控件MFC类CProgressCtrl的有关成员函数。函数SetRange()或GetRange()用于设置或获取控件值的范围,函数SetPos()和GetPos()用于设置或获取控件的当前位
12、置,函数SetStep()用于设置步长,函数StepIt()用于在控件窗口填充一个蓝色块。,例 编写一个单文档应用程序PrgresAnmt,执行“测试控件|进度条和动画”菜单命令时在用户视图区播放一段动画,并用进度条提示动画播放的进程。,9.3.4 标签控件和属性表,1.标签(Tab)控件标签(Tab)控件也称选项卡控件,它是一个分割成多个页面的窗口,每个页面都配有一个带有标题的标签,单击一个标签就显示对应的页面。标签控件在功能上等价一系列对话框窗口,但使用起来更接近于我们的使用习惯。编程时使用标签控件,可以在一个窗口的相同区域内定义多个页面,其中每个页面(可以是一个对话框)上包括一些不同的控
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VisualC 面向 对象 编程 教程 对话框 高级
链接地址:https://www.31ppt.com/p-6079310.html