当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第7章 Windows标准控件在可视化编程中的应用 > 7-8 对话框通用控件 > 7-8-1
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
下面给大家介绍对话框的通用控件
大部分控件都是在对话框中使用的
无论是基于对话框的应用程序
还是文档/视图结构的应用程序
这时候大家接触到一个新的概念
文档/视图结构 Doc/View
这就是我们后续要讲的单文档、多文档操作的内容
控件通常是放在对话框当中
这节我们将介绍各种Windows通用控件的使用
首先我们介绍的是Picture控件的使用
我们可以把Picture控件当作一个分割线
我们看看怎么用
我们建立一个7_9的应用程序
基于对话框的应用程序
我们创建了这样一个应用程序
然后我们将Picture控件拉过来
在这个控件里面有一个Type属性
这个时候我们把它的Type属性
原来是Frame
我们选择Frame属性
颜色Color
Color我们选择Etched
然后我们把原来的框架拖到最长
颜色原来是Black
大家可以看来原来Black的颜色是这样的
我们变成Etched
有变化
大家仔细看有变化
然后拉到最细
这时候Picture控件看起来就是一根细线
这个我们可以给它当做分割线来使用
我们拖放一个Picture控件
给它拖放过来
那么Type属性这里面有好几个
我们给它设成Icon
或者用Bitmap也可以
设置Image属性为相应的资源ID
这个时候我们就要做一件什么事情呢?
我们这个时候在资源里面导入一个图
那么我们添加一个资源
资源我们选择的是一个图标
我们就选择图标资源
这个时候我们导入一个图标资源
这个导入图标资源的前提是这个图标文件已经产生
比如说我导入这个图
打开
这个时候我们已经看到了这个图
它会产生一个ID
缺省的ID的话就是IDC_ICON1
我们再回到这个界面上来
大家看到这里产生了一个IDC_ICON1
ICON1就是这张图
然后我们在它的属性里面设置Image属性
Image属性我们就找到IDC_ICON1
大家看图马上就变化了
这时候我们把它编译一下
通过了
我们运行一下
这时候这图标就在这儿
大家就看到了
紧接着我们再做一个例子
在这个基础上我们安放一个Spin控件
这个Spin控件实际上是一对按钮跟一个编辑框
所以Spin按钮控件提供了一个双向的箭头
实际上这个箭头是按钮
用户通过点击箭头可以微调控件所表示的这个值
Spin控件实际上是CSpinButtonCtrl类的一个对象
所以Spin控件通常和Taborder位于它之前的控件成对使用
如果位于它之前这里是一个编辑框
通过CSpinButtonCtrl的GetBuddy方法可以跟它进行匹配
那我们怎么做呢?
我们看一下
这个时候
我们向对话框安放一个编辑框
我现在安放一个编辑框
这个编辑框我设为只读
然后通过一个Spin控件
Spin控件是这个控件
大家看Spin控件实际上只是一个上下的按钮
我们拖放一个Spin控件
放到它的右边,挨着放
这时候它的ID值,这个是Spin1
这个编辑框的ID值是EDIT1
我们都用缺省值
对这个Spin控件,我们设置它的EDIT属性
这里写的是Unattached,就是跟前面没有关联了
我们给它关联上,而且是右关联
然后我们选择Auto Buddy属性,点True
然后操作就会跟左边的编辑框联系起来
这个就是我们刚才说的跟TabOrder位于它之前的对象连接
这个Spin控件之前建立的对象是这个编辑框
所以它就和它连接起来了
这个时候我们要做一件什么事情呢
就是要设置Spin数据的范围和初始值
前面和大家说过
对程序运行已经设置好的内容
它应该是在OnInitDialog函数里面完成
我们先保存一下
回到cpp程序,然后找到OnInitDialog
在TODO这个地方添加我们的代码
我们在这里面
因为后面还要添加很多的代码
为了做一个标识,我们写一个注释行
这里写上Spin说明我下面响应的代码是对Spin进行响应的
因为我们后面还要增加别的控件
所以这里做一个标识
那这个地方我们增加什么内容呢?
我们增加这些内容
这时候我们创建了一个CSpinButtonCtrl的对象
指向这个对象的指针pSpin
那么这个怎么获取呢
是GetDlgItem,为什么是GetDlgItem呢
因为Spin的对象是放到对话框上面的
所以是获取对话框上面的项
哪一个项呢?
Spin1这个项
然后定义了一个指针指向这个项
那么这个指针类型
因为我们GetDlgItem,对话框里面可以放很多对象
所以我们获取这个对象就要强制类型转换成CSpinButtonCtrl类的对象
所以我们定义了指向对象的指针
然后设置Spin上下的范围0到100
SetPos是程序运行显示出来的值是50
然后GetBuddy的SetWindowText值设为5
那么也就是说0到100的范围我们在0到10的范围来显示
所以当缺省的位置50的时候我们设为5
是这样的
这个时候我们运行一下这个程序看能有什么效果
好了,实际上运行的时候大家看这个Spin和编辑框已经合为一体了
但是我现在看到的5是SetWindowText产生的
但是我现在按Spin的上下按钮它的值并不能动
因为这里只是设置了初始状态
还没有对这个Spin进行消息响应
我们要向这个对话框中呢响应一个垂直滚动条消息
因为这个就属于垂直滚动条
所以我们在类向导里面响应一个消息
这个消息是垂直滚动条消息
垂直滚动条消息,我们这个时候要响应这个消息
添加,添加完这里就产生了这个处理程序叫做OnVScroll
然后我们要编辑它的代码
好了这时候系统就出现了一个对话框上面的垂直滚动条消息
在TODO这个地方我们仍然添加它的代码
我们是GetDlgCtrlID
因为是垂直滚动条所以系统这里生成一个滚动条指针
然后滚动条指针里面获取对话框的ID
如果控件ID是IDC_SPIN1
那么就是对这个Spin1进行响应
这时候我们要响应什么值呢
我们定义了一个字符串strValue
然后把当前值除以10
这就是刚才看到的范围是0到100
我们都除以10
也就是说原来这个地方是50的时候
我应该显示的是5,就是这么个道理
这个时候以3.1f的格式放到这个字符串中
然后我们通过CSpinButtonCtrl指向这个控件
GetBuddy,Buddy实际上是左边那个编辑框
因为Spin已经跟左边的编辑框融为一体了
然后设置窗口的值是strValue
strValue就是当前Pos除以10的值
这样的话我们就可以执行了
这时候大家看到我这能动了
对吧,刚开始这个Spin按钮动的时候它的值是不变的,现在它可以变了
就是因为我们进行了
先取了这个Spin对象的ID
然后对它定义了一个字符串变量
然后将当前Pos的位置除以10
然后设置到字符串里面
然后通过字符串显示到编辑框里面
那么大家会说,这里按Spin,它为什么会动
因为这里面设置了垂直滚动条的消息处理
这个是系统自动完成的你不要管了
-讨论实录
--0-0
-6-1 MFC概述
-6-2 C++的基本知识
--6-2-1 类
--6-2-2 对象
--6-2-6 重载
--6-2-9 指针
-6-3 MFC类的组织结构及主要的类的简介
--6-3-2 根类
-6-4 MFC中全局函数和全局变量
-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-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-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-1 利用音频函数实现多媒体程序设计
--10-1-1
--10-1-2
--10-1-3
--10-1-4
-10-2 利用Windows Media Player控件实现多媒体程序设计
--10-2
-课堂示例源代码
--html
-例11-1
--例1
-例11-2
--例11-2
-例11-3
--例11-3
-例11-4
--例11-4
-11-1 ODBC介绍与引用
--11-1
-课堂示例源代码
--html
-第三次作业及答题链接