当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 >  第7章 Windows标准控件在可视化编程中的应用 >  7-8 对话框通用控件 >  7-8-2

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表

7-8-2在线视频

7-8-2

下一节:html

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表

7-8-2课程教案、知识点、字幕

我们下面再介绍一个Progress进度条

进度控件是一个用来指示长时间操作的进展程度的一个控件

MFC里面用CProgressCtrl类来支撑这个进度条控件

进度条也是有一个范围和当前位置的

范围是表示整个操作的持续时间

当前位置表示当前进行到什么位置

进度条根据当前位置来判断进行的百分比,来显示进度

我们来试一下,在原来应用程序的基础上

我们来安装一个进度条

我们这时候添加一个Progress控件

这是一个进度条

默认ID是PROGRESS1,不管了

属性里面有一个Smooth属性

我们要求平滑显示,所以选择Smooth

在旁边我们给它增加一个按钮

按钮的ID我们设置为BUTTON START

Caption设置为开始

因为比如说我们要进行什么操作

是一定要给它下命令的

下命令的话

比如说我们要对这个进度条进行操作

我们也要给它下个命令

所以我们有一个开始按钮

同样的话,进度条我们要设置它的进度范围

我们也要在OnInitDialog里面进行设置

我们回到OnInitDialog

这就是为什么前面加了一个spin这样一个注释符

我这里仍然加一个注释符

这里是Progress

这样就知道我这里加的代码是针对进度条的

而前面加的代码是Spin的

因为这个程序里面一直要再往里面加不同的控件

所以为了识别哪一段代码是响应哪一个控件

我们就加一些注释

这样程序的可读性就大大提高

我们看一下这个代码

这个时候我们仍然是在对话框中去获取GetDlgItem

这Item是Progress1

在这里面也是设置了范围

我们定义了一个Prog是指向这个Progress的一个指针

也是在GetDlgItem对话框里选择它的ID

然后设置它的范围

进度条的初值一定是起始位置

你不能说进度条的初值

整个范围是0到100,你设置50

那么从半路开始是不适合的

我们运行一下

这个按“开始”按钮它是不工作的

为什么不工作呢?

没给它响应消息

那么这样的话我们就为这个按钮响应一个消息

我们添加一个事件处理程序

单击,用它缺省的名称

这个时候我增加它的代码

当单击这个事件之后

获取这个滚动条控件

然后初值设为0的情况下

我们进行SetTimer

SetTimer就是计时器

每一秒有一个进度的变化

我们现在运行一下这个程序

现在开始它还是不动

无效什么原因呢?

因为我们在这里面设置了一个定时器

所以我们在对话框中还要增加对定时器的消息响应

所以我们回到原来的对话框

在对话框里面,类向导里面,消息里面有一个WM_TIMER消息

我们响应TIMER消息

我们可以编写它的代码

这个TIMER消息TODO在这儿

那我们看一下加的代码是什么

如果这个TIMER消息传过来的是一个事件消息

这个事件实际上是一个时间,如果是1000毫秒,1秒的情况下

然后在对话框里面GetPos

这个Prog大家都知道了

指向这个Progress控件

那么我们怎么办呢

获取当前位置加1

加1的话,如果大于等于100

然后就Kill,就结束

因为我们是0.1秒一次

那么这样的话就100次

实际上就把这个控件设置成100个运行区间

大家看到有卡顿实际上是有定时器在工作

不断的发送消息

每隔0.1秒进度条是往前走一步的

那么这样的话大家就知道到了一定时间之后它就停下来了

下面再给大家介绍一个控件,叫Slider控件

Slider控件叫滑块控件

滑块控件也是经常使用的

它可以使用户通过拖动滑块来快速获得指定的数据

当用户滑动滑块的时候,控件将发送消息来指示变化

所以滑块控件在你选择一系列离散值或者一段连续范围内的时候

应该说是十分有用的

那下面我们就在原来程序的基础上增加一个滑块控件,Slider控件

滑块控件

好,我们增加一个Slider控件,把它搬过来

然后设置它的Point属性

我们给它设置成Bottom/Right

然后在旁边我们增加一个静态控件

这个控件的ID我们设置成SLIDER STATIC SLIDER

用来显示当前滑块的位置

我们保存一下

同样这滑块也是有它滑动的范围

所以我们仍然要在OnInitDialog里面设定它的范围

好了,这时候我们再来一个注释

这里写成Slider

这时候就知道下面这段代码是为Slider控件进行初始化的

我们看一下

我们定义了一个字符串

然后定义了一个CSliderCtrl的对象指针pSlide1

也是从对话框里面GetDlgItem里面获取SLIDER1

然后设置范围是0到100

初值为50

然后获取当前的值,以整型数的形式放到strText1里面

然后设置对话框里面选项,哪一个选项呢?静态文本框

显示的当前滑块的滑块位置值

我们现在运行一下

这时候初值为50

这是我设定了的在这儿

但这时候我移动滑块它的值并不改变

什么原因呢?

因为我们还没有对滑块的水平滚动的消息响应

因为刚才这里所做的工作只是初始化

好了,我们下面再对话框里面响应一个水平滚动消息

刚才的Spin控件我们响应的是垂直滚动

我们现在响应的是水平滚动

我们添加处理程序

就添加一下OnHScroll

大家可以回忆一下我们刚才加的OnVScroll

我们加OnHScroll,确定

这时候我们就要添加相应的代码

代码里面我们是获取对话框里面控件的ID

如果是IDC_SLIDER1

那么就是我们对滑杆进行操作

这时候我们定义一个指针

是CSliderCtrl对象的指针

仍然我们定义CString的strText

然后把当前获取的值给它以%d的形式放到strText里面

然后将strText里面

我们把这文本通过SetDlgItemText放到静态文本框里面去

这个和前面初始化不一样的地方在哪里呢

因为初始化我给它赋了一个初值

当前位置值为50

然后去取这个值的时候就是取得50

那么在这里面我并没有给它赋值

而是根据滑块移动它的位置去取这个值

所以这样就可以随着滑块移动来改变文本框的值了

大家可以看到这个就是跟前面初始化的时候不一样的地方

初始化我设定了一个值

然后GetPos只能取这个值

而这个我在这里面是通过pSlide直接获取滑块位置的值

在这里面还有一个区别的地方我给大家提示一下

就是这个pSlide指针是指向哪儿呢

它是获取对话框的项,然后设置范围跟当前值

而这个地方的话它是直接获取ID,对ID进行判断

那就是说,如果SLIDER对象的滑块发生了变化

它马上就会进行响应

获取它的消息

那么这两个地方对SLIDER对象的处理是不一样的

也决定了它的初始值是不跟着滑块动的

而这个地方的值是跟着滑块动的

所以这是一个水平滚动条

实际上它是属于水平滚动条的范畴

而且这里有一个滑块的消息响应机制来获取滑块的移动消息

而在初始化里面并没有获取滑块移动的消息机制

只是给了缺省值

而在这个地方,下面这个地方

它是有滑块移动消息传递机制的

所以这个地方是不一样的

下面我们再看一个时间日期控件

时间日期控件可以用来接收日期或者时间输入

用户可以直接按照指定的形式输入,也可以在弹出的日历控件中选择日期

如果用户以字符串形式输入的话,则由于输入的多样性,程序并不好解析

所以我们直接去选择用这个时间日期控件

可能处理起来会比较好一些

我们回到刚才的对话框

这个时候在对话框上增加一个Date Time Picker

就是时间日期控件

我们增加这个控件

给它拿过来

格式上我们用短数据的格式

短日期设置Data

这里有一个Use Spin控件

Use Spin Control我们用True

用Spin这里就增加这么一个东西

原来没有的时候就没有这个

然后有这个可以通过上下按钮来选择时间

如果不选择的话,也就是False

大家知道它会弹出一个日历控件

通过日历控件进行输入

也就是说这个日期要么通过日历控件输入

要么是通过Spin控件上下箭头的变化来输入

也就是说不让用户自己输入

输入格式不可控

这时候我们在这个控件旁边加一个按钮

这个按钮的ID为IDC_BUTTON_TIME

Caption给它设为报时

好,报时

我们先保存一下

然后我们仍然是要在初始化里面做一些工作

在初始化里面 在OnInitDialog里面

我们仍然通过注释一句

写一下 这个叫做Date Time Picker

这时候就知道下面的代码是为时间控件而编写的

我们定义了一个指向DateTime控件的一个指针pDT

然后是GetDlgItem

这个ID就是一个缺省的ID值 就是时间控件的值

也就是获取对话框上的时间控件

然后时间的格式我们写成是“今天是:年/月/日”的格式

然后通过时间控件的成员函数 时间控件类的成员函数SetFormat

把显示的格式放到里头来

那么它变化的就是年月日值的变化,而前面“今天是:”

大家注意是一个单引号括起来

这个斜杠也是单引号括起来

这个斜杠也是单引号括起来

唯独没有括起来是年月日

所以这个格式串大家要会识别

这个很可能会看成yy被括起来

不是的 这个单引号是这么一对的,这是这么括是斜杠的,是这么一对的

所以这个地方大家不要看错了

把这个字符串的格式传给SetFormat

这时候由于我们有一个按钮

按钮里面是一个报时这么一个按钮

所以我们要为按钮添加消息响应

添加事件处理程序

单击,用系统建议的名称

我们增加它的代码

这里定义了一个pDT指针指向这个时间日期的控件

然后定义了一个时间类的参数 或者说变量t

然后获取这个时间t

这个t就是我的机器当前的时间和日期

然后以年月日时分秒的形式来显示出来

然后把这个时间值放到s里面来

然后s通过消息框显示出来

我们来编译一下 执行一下

机器缺省的显示时间是15年2月7号

这个工作是哪里做的呢?

是在这个地方做的OnInitDialog里面 初始化里面“今天是:年/月/日”

然后是SetFormat

把当前的时间获取出来

因为这里是时间控件 时间控件自己会提取当前机器的时间

这是系统已经给它做好了

所以我们按这个格式连接成一个字符串

我们就可以根据字符串的格式把年月日换成当前机器的时间年月日

所以大家看到我没有按报时的情况下它显示的今天是15年2月7号 年月日

那么这时候如果按报时

按了报时后它响应的是这个代码

它响应出来的内容是2月7号15年 11点58分48秒

这里面实际上是这么一个格式

这是时分秒,这是年日月

这是日月 然后这个是星期

所以这个应该是这么个形式来体现的

然后最后是把这个信息放到字符串s里面

通过消息框把这个s字符串内容显示出来

大家看到的就是这个内容

好了!我们这个例子就介绍到这儿

这个例子是把很多常用的控件结合到一起

相对来说是比较综合的例子

我想这个例子相关的知识点大家在将来的编程中应该会经常用到

VC++面向对象与可视化程序设计(下):MFC编程基础课程列表:

第0章 课前讨论

-讨论实录

--0-0

第6章 MFC基础知识

-6-1 MFC概述

--6-1 MFC基础知识

-6-2 C++的基本知识

--6-2-1 类

--6-2-2 对象

--6-2-3 类的方法

--6-2-4 内联函数

--6-2-5 构造函数和析构函数

--6-2-6 重载

--6-2-7 友元函数

--6-2-8 友元类

--6-2-9 指针

--6-2-10 类的继承

--6-2-11 多态性和虚拟函数

-6-3 MFC类的组织结构及主要的类的简介

--6-3-1 MFC类的组织结构

--6-3-2 根类

--6-3-3 应用程序结构类

--6-3-4 可视对象类

--6-3-5 通用类

--6-3-6 OLE类

--6-3-7 ODBC数据库

-6-4 MFC中全局函数和全局变量

--6-4 MFC中全局函数和全局变量

第7章 Windows标准控件在可视化编程中的应用

-7-1 概述

--7-1-1

--7-1-2

-7-2 按钮控件及其应用

--128B12447816EEF99C33DC5901307461

-7-3 按钮控件及其应用

--7-3

-7-4 静态控件

--7-4

-7-5 列表框控件

--7-5-1

--7-5-2

-7-6 编辑框控件

--7-6

-7-7 组合框控件

--7-7

-7-8 对话框通用控件

--7-8-1

--7-8-2

-讲义源代码

--html

第8章 在MFC中创建应用程序的资源

-8-1&2 资源的应用以及菜单资源的使用

--8-1-1

--8-1-2

-8-3 快捷菜单的创建及其应用

--8-3

-8-4 加速键资源的创建及其使用

--8-4

-8-5 工具条资源的创建及其使用

--8-5

-8-6 字符串资源的使用

--8-6

-8-7 位图资源的创建及其使用

--8-7

-课堂示例源代码

--html

-第一次作业内容及要求

--html

--第一次作业及答题链接--作业

第9章 单文档与多文档

-9-1 概述

--9-1

-9-2 Doc/View框架的主要成员

--Video

-9-3 文档操作中的一些重要概念

--Video

-9-4 SDI编程实例

--Video

-9-5 MDI编程实例

--9-5-1

--9-5-2

-课堂示例源代码

--html

-第二次作业内容及要求

--html

--第二次作业及答题链接--作业

第10章 多媒体应用程序的设计

-10-1 利用音频函数实现多媒体程序设计

--10-1-1

--10-1-2

--10-1-3

--10-1-4

-10-2 利用Windows Media Player控件实现多媒体程序设计

--10-2

-课堂示例源代码

--html

第11章

-例11-1

--例1

-例11-2

--例11-2

-例11-3

--例11-3

-例11-4

--例11-4

-11-1 ODBC介绍与引用

--11-1

-课堂示例源代码

--html

第三次作业及答题链接

-第三次作业及答题链接

7-8-2笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。