当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第7章 Windows标准控件在可视化编程中的应用 > 7-6 编辑框控件 > 7-6
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
好!这一次课我们开始介绍编辑框控件的使用
编辑框控件看起来是个非常简单的矩形窗口,但它具有很多功能
实际上,上一节课我们在介绍例子的时候
随着滚动条滑块的移动,在编辑框里面显示了滚动条滑块的位置
实际上,我们已经初步接触了编辑框
编辑框控件可以自带滚动条,显示多行文本
编辑框控件包含了单行编辑框控件和多行编辑框控件
CEdit实际上这是一个编辑框类,它的类也是在CWnd下面
所以它是CWnd这个类直接派生来的
这就意味着CEdit类具有CWnd类的所有功能
CEdit类的通用方法比较多
我在这里主要给大家介绍几个
一个是CanUndo(),决定一个编辑操作是否可以撤销
大家在学应用程序的时候经常会发生把上一次的操作撤销掉
实际上就是Undo
能不能Undo,我们要调用方法CanUndo()来决定它是否可以撤销
还有Copy(),大家经常用到copy、paste
这个大家比较熟悉
再比如说GetPasswordChar()
这是当用户输入文本时,获得编辑框控件中显示的密码字符
再比如说LimitText()限定用户可能输入一个编辑框控件的文本长度
这个LineScroll()滚动多行编辑框控件的文本
这是是Paste()是经常和Copy()一起合用的
这个是ReplaceSel()是用指定文本替代编辑框控件中当前选择的部分
这个是SetReadOnly()将编辑框控件设置为只读
那么这个时候编辑框控件只能显示它该显示的数据
或者只能显示程序让它显示的内容,而用户无法输入内容
这个Undo()就是取消最后一个编辑框控件的操作
我们说编辑框支持单行编辑和多行编辑
那么多行编辑它支持的CEdit类的方法主要有这些
比如说LineIndex()设置多行编辑框控件中一行字符的下标
比如说SetTabStops()在多行编辑框控件中设置制表位
再比如说GetLine()从一编辑框控件中获得一行文本,等等
编辑框与应用程序间的消息传递是如何进行的?
编辑框通过向其父窗口发送WM_COMMAND消息通知应用程序与用户的交互信息
这个消息的字参数的低字节为控件标识,就是控件的ID
高字节为消息通知码
通知码主要有如下这些
比如说SETFOCUS让编辑框获得输入焦点
KILLFOCUS是编辑框失去输入焦点
既然编辑框失去了输入焦点,那么编辑框就没法进行输入操作
CHANGE是编辑框的内容发生变化
UPDATE是编辑框的内容被更新
当用户输入的时候,内容就需要进行更新
MAXTEXT是编辑框中的用户输入已达到允许的最大字节数
以及编辑框中它内容的水平滚动条和垂直滚动条
也就是说它的内容超出水平方向可显示的范围和垂直方向可显示的范围
它都要加上滚动条
这个时候就发送滚动条的消息
应用程序对编辑框的操作通常通过调用函数SendMessage或SendDlgItemMessage来完成
这里面也有相应的消息比如说LINESCROLL设置滚动条滚动的步长
GETFONT获取编辑框使用的字体
REPLACESEL替换编辑框中的选中文本
SETPASSWORDCHAR设置密码编辑框中的替代字符
因为我们在输入密码的时候经常显示出来的是星号,而并不是直接显示你输入的密码
这个时候替代字符就是“*”号,就是在这里设的
再比如说SETREADONLY这是设置编辑框为只读的一些消息
好了,相关消息比较多,我们主要介绍这么几个
下面我们介绍7-6这个例子
这个例子的功能是要求编写加减乘除四功能计算器
介绍之前呢,我们先把程序运行一遍
程序在运行的时候,界面是这样的
比如说现在我输入一个5
再选择运算数里面,选择第二个运算数是8
初始的时候在加的状态,就是5加8
如果我点减的话,就是5减8,等于-3
乘的话就是40
除的话就是0.625
如果重置的话就是都归零
重新进行数据的输入
比如说8,这个是12
那么加起来20,减、乘、除,都没问题
那么我们看这个计算器怎么来完成
首先大家已经很熟悉了
建立一个基于对话框的应用程序
这里有编辑框三个
头两个编辑框是用来输入数据的
第三个编辑框是输出运行结果的
所以编辑框的ID设置为IDC_NUM1、IDC_NUM2
结果这个地方ID设置为IDC_RESULT
由于要进行计算及结果的输出
我们将第一个编辑框连接一个变量
double类型的数据m_num1
第二个编辑框连接变量m_num2
第三个编辑框连接变量m_result
从编辑框里面第三个编辑框是灰的
大家知道属性的地方设置成只读
因为结果是靠计算器的计算输出
而不是人工的输入
所以变成只读后就无法进行人工的输入
这里有一个按钮——重置
重置的功能刚才程序运行的过程中大家已经了解
对于重置这个按钮我们给它定义的ID是ID_RESET
我们这里分别有加、减、乘、除单选按钮
给它连接的ID分别是IDC_ADD,SUB等等,加减乘除
由于它是一组互斥的按钮
所以对于“加”给它的属性设置为Group
并且给它连接变量m_operator
好了,我们有了这些之后
下面要做的事情是对第一个编辑框连接它的响应消息
我们响应的是CHANGE消息
在CHANGE消息里面我们编写代码
首先是先对内容刷新
然后去接收第一个单选按钮的变量
如果这个变量收来的值是0、1、2、3
这0、1、2、3是怎么来的呢
是计算加减乘除,由于它是连续顺序的
所以在编号索引上,它是第0号、第1号、第2号、第3号
m_operator的值如果选择的是加,它就是0
减就是1,乘就是2,除就是3
那么这样就很简单了
在编辑框中输入值之后,我们选择加减乘除
单选按钮中的某一个
如果选的是0,它显然是加
加的话就把两个数相加就可以了
如果是减,我们把两个数相减
当然我们这里是为了显示这些控件的使用
所以对除的运算里面没有去判断分母为0的情况
其实case 3这里大家可以增加一个判断
如果m_num2为0,输出一个错误消息
如果不是0的时候进行它的除的计算
当然case 3已经到最后了,可以不加break
那么对加的运算、对减的运算、对乘的运算、对除的运算
都要分别连接一个函数
这个函数里面实际上很简单
每一个函数的处理都去调用OnEnChangeNum1()就可以了
因为处理过程判断的只是m_operator
而m_operator已经包含0、1、2、3
所以只需要调用这个函数就非常简单
同理调用第二个编辑框仍然是这么做
第二个编辑框的数据变化的时候还是调用CHANGE1
为什么还是调用CHANGE1呢
因为调用它的时候同时已经对两个编辑框的数字
根据选项0、1、2、3进行了计算
所以我们只要编好第一个函数就可以了
对Reset情况呢,就是复位
复位的时候每个值都为0,就可以了
程序运行过程中,大家看到
程序运行过程中缺省是显示“加”
因为在Reset里面m_operator设为0
Reset的时候它又回到程序运行前的状态
那么这个加,运算数是0,这个运算数也是0
这三个值是怎么来的
为什么刚开始的时候是加
这个我想大家比较熟悉
因为我们多次讲过,程序运行我们看到的状态
这些内容应该在OnInitDialog()里面设置
在OnInitDialog()里设置这几个值为0就没问题了
好了,那么这个例子比较简单
我们就介绍到这儿
-讨论实录
--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
-第三次作业及答题链接