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

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

7-5-2在线视频

7-5-2

下一节:7-6

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

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

下面我们通过一个例子

跟大家一起来学习一下编辑框控件的使用

这个例子的要求是这样的

单击Show1按钮,在Edit1

这个是Edit1

的编辑框中显示“This is the first EditBox.”

当单击Clear1,这个编辑框中的内容被清除掉

单击Show2这个按钮的时候

在Edit2这个编辑框中显示“This is the second EditBox.”

单击Clear2这个按钮,那么Edit2编辑框中的内容就被清除掉

单击Transfer按钮

就把Edit1编辑框中的内容拷贝到Edit2编辑框中

然后Undo取消上一次操作

单击Exit按钮的时候,整个程序退出运行

整个例子就是这样的

那我们一起来学习一下这个例子该怎样做

我们打开Visual Studio

把工程文件的名字叫做7_5

当然了这个程序是基于对话框的

所以我们选择基于对话框

有一些东西暂时不要的可以给它去掉

前面的例子都是这样做的,就不细说了

先把这里原来自动产生的一些控件去掉

然后根据题目的要求进行界面的设计

我们在这里设置一个编辑框

把编辑框拉过来

然后在编辑框的右边有两个按钮

第一个按钮叫做Show1

我们设置它的属性的Captain为Show1

然后我们再设计一个按钮叫做Clear1

把Captain改成Clear1

再安放第二个编辑框

放置按钮Show2和Clear2

这当中有一个退出按钮

Transfer按钮

和Undo按钮

这里面我们把四个按钮再往右边移动一点

把编辑框拉宽一点

这样界面基本上就设计好了

保存一下,免得丢了

我们把长宽再做一些调整

这是为了美观

那么这个时候我们要为每一个对象设置控件

大家看到了在这张表里面有两个编辑框

编辑框是没有Caption的

不像按钮在上面会显示内容

有几个命令按钮

比如Show1、Clear1、Show2、Clear2、Transfer

以及退出、撤销等等

都给它设置Caption

然后要为每一个对象设置ID

我们按照这样的规律来设置

就是EDIT1、EDIT2

按钮是SHOW1_BUTTON、CLEAR1_BUTTON、SHOW2_BUTTON、CLEAR2_BUTTON

以及Transfer_BUTTON、退出、UNDO

我们把控件的ID一起来设置一下

按照刚刚的要求对编辑框进行ID的设置

这个设置成ID的EDIT1

这个设置成ID的EDIT2

这个设置成EDIT2

Show1的设置成SHOW1_BUTTON

Clear1的改成CLEAR1_BUTTON

Show2按钮改成SHOW2_BUTTON

Clear2同理改成CLEAR2_BUTTON

Exit的改成EXIT_BUTTON

这个改成Transfer_BUTTON

这个改成UNDO_BUTTON

我们赶紧保存一下

这样设计好了界面

同时为界面上的每一个对象连接了它的ID

刚才我对每个控件进行了属性设置

属性设置里面实际上牵涉到很多的样式,外观的样式

比如说Bitmap,位图按钮

比如说这是多行的

这是对它的文字显示进行样式设置

Transparent是透明的等等

对编辑框来说它也有很多样式

比如说Auto HScroll自动产生水平滚动条

大家一看HScroll是水平的,VScroll是垂直的 很容易识别

也就是说在这里面

对编辑框来说它有很多样式宏

常见的,比如说

Center,将文本置中

Left,左对齐

MultiLine,多行

以及Password,将编辑框中所有输入的字符以*显示

ReadOnly是防止用户在编辑框中输入或编辑文本

我们回到编译环境

在这里对应编辑框我们看到有ReadOnly的设置

现在是False

如果改成True,这里就变灰了

用户没法输入,只能接收显示

我们还把它改回来

这是一个样式

下面我们介绍代码编写部分

由于编辑框里面要显示字符串

所以要给编辑框连接变量

连接的变量是m_edit1和m_edit2

我们就给大家一块儿来操作一下连接变量的问题

好了,在这里我们添加变量

变量名叫m_edit1

这里面类别,也就是控件类别,我们不要做修改了

这个变量类型是Edit,我们直接用Edit就可以了

就这样完成

然后将第二个编辑框同样增加变量m_edit2

大家要注意一个问题了

如果这时候类别改成了Value

这里的变量类型就变成了String

它就不能调用Cedit类的成员函数

比如说Copy、Paste

而我们在题目里的要求,通过单击Transfer按钮

将编辑框1的内容传给编辑框2

实际上是拷贝粘贴

把第一个编辑框内容拷贝

然后粘贴到第二个编辑框里

所以这个时候不能用Value这个类别

必须用Control类别

变量类型是CEdit类的变量

实际上是CEdit类的一个对象

它既然是CEdit类的一个对象

它就能够接受CEdit类的一些成员函数

比如说Copy、Paste等等

这样才能完成应用程序中对Transfer按钮要求复制内容的操作的响应

那么这个时候我们来试着运行一下这个程序

看看有什么效果

大家看编译运行,编译是成功的,没有问题

我们执行一下

我们这时候在屏幕上输入一些内容测试一下

比如说我输入line1,回车

没了

回车了终止程序运行

同时文本框中也没有水平和垂直滚动条

我们下面要完善一下编辑框的特性

让它能够进行多行文本的输入

那么我们怎么改呢

我们先把应用程序退出

现在由于没有做代码的响应

所以现在任何按钮都不能操作

我就通过关闭窗口来退出

这时候我对Edit1选择Multiline

我要选择它的多行属性

那么Multiline设置成True

然后把它设置成Read Only

就是不能够从键盘输入

如果希望从键盘输入

那么Read Only的False保留

Want Return选择True

这样回车后程序不会退出

然后滚动条这里

自动水平滚动条和自动垂直滚动条都选成True

这是自动出现,我让它就是存在

我们把这些都选上

这时候我们把程序保存一下

关于Want Return这个问题

我想再给大家重点强调一下

如果没有选择这一项

在编辑框中如果按回车键就会终止程序的运行

如果选了此项,按回车键就可以进入下一行的输入

实现多行输入

所以Want Return的地方我要给大家做一个重点强调

这个时候大家看界面上第一个编辑框和第二个编辑框的样式不一样了

这里已经有水平滚动条跟垂直滚动条的影子在这儿

因为我们已经加上了

如果我们再回过头来看一下

把水平滚动条选False

大家看到水平滚动条没有了,垂直滚动条在

垂直的我再给它False,就都没有了

都没有了之后什么时候会出现

因为我们选择了Auto HScroll和Auto VScroll

也就是当我允许多行输入

因为我这里前面选择了Multiline是True

那么多行输入它的行数超过编辑框所显示的内容的时候

它会自动的出现滚动条

所以我这里直接就别让它自动了

都给它安装上去

这个时候我们只是设置了它的属性

同样对第二个编辑框设置相同的属性

Multiline等于True

Want Return是True

自动滚动条是True

水平滚动条是True

垂直滚动条是Ture

我们都选上

然后给它保存一下

下面我们要做的事情是什么

现在如果编译程序,它仍然不能够正常运行

因为我要对它的按钮设置它的响应函数

那么我下面就对按钮设置它的响应函数

这个时候单击Show1,添加事件处理程序

事件消息类型是单击

然后它缺省了有一个函数处理程序的名称

我们一般直接就用了缺省的

然后添加

这个时候系统就为我们生成了一个函数

这个函数是空壳的

我们在这里增加函数的内容

但现在我们再给大家复习一下

就是说我增加了这个函数之后

大家看一下

在头文件里面已经增加了edit

这个编辑框的变量在这里了

这个是我们应用程序生成的对话框类7_5

这时就产生了OnBnClickedShow1Button这个函数

这个函数只是类里面定义了一个public的方法

那么这个函数为什么说是响应了Show1的这个按钮呢

我们看Dlg.cpp这个文件

在消息响应这个BEGIN_MESSGE_MAP的消息映射的区域里面

我们看到响应单击消息

然后是IDC_SHOW1_BUTTON

这时候大家知道这是Show1的Button

它绑定了CMy7_5Dlg

就是我们创建的7_5类里面的OBnClickedShowButton

在这里前面定义了这个类的方法

但是这个类的方法通过消息映射的定义

给它绑定了是对SHOW1_BUTTON控件的响应

也就是说这个函数不会响应SHOW2、CLEAR2其它按钮的消息

这时候我们给它添加相应的代码

这些代码的含义是什么呢

这些代码的含义是这样的

m_edit1即编辑框1里面的SetSel(0,-1)

就把编辑框1里面的内容都选上

它就是选中编辑框EDIT1中的全部内容

然后RelaceSel(L"This is the first EditBox")

把原来不管显示的是什么内容

都替换成这个字符串的内容

也就是说我们单击了Show1的按钮后

就会显示这个字符串的内容

我们测试一下

这时候我按Show1

它出现了“This is the first EditBox.”

但大家看由于我Show2还没做

所以我按Show2之后是没有任何响应的

下面呢我们就把所有的按钮进行消息响应

Clear1也缺省了响应方式

这里我不细讲了,比较快的做下去

然后我们再来填写代码

Undo的话也一样添加、编辑

都可以了

这里比较快的几个步骤的,都给它做下去

开始填写代码

实际上在这里我们对每个按钮控件进行了消息响应的设置

这里都是消息响应的函数

我们一个一个的填写这些函数

根据前面的套路知道这是显示的Clear1按钮的消息响应

既然是Clear1,就是Clear掉,空了

我们就把编辑框1的所有内容选择上

给它替代一个空串,它就空了

这个是退出按钮

退出按钮也给它加一个代码

退出按钮就是OnOK就可以退出了

Transfer按钮看一下怎么做

Transfer按钮就是把编辑框1的所有内容选择上

然后调用Copy函数,Copy到内存里面

然后把编辑框2的内容都选上

首先要把它赋空

然后进行粘贴

那么我想问一个问题

如果不赋空会怎么办

如果不赋空就会产生一个问题

就是原来的字符串,如果比较长

现在贴过来的字符串比较短的话

那么贴过来的字符串只覆盖原来字符串里面的部分字符串

所以这样会出问题

因此一定要先把第二个编辑框赋空

再粘贴

贴过来的是完完整整的是第一个编辑框的内容贴过来

而后面不会有别的字符产生

好了,我们这里的Undo

那么Undo实际上很简单

就是第一个编辑框的Undo和第二个编辑框的Undo

这个已经都给大家介绍过了

Undo是编辑框类的方法

我们保存一下

下面我们看Show2

Show2和Show1处理的非常类似

就是把第二个编辑框所有内容选择上

然后替代成,ReplaceSel,替代成

Clear2跟Clear1也是非常类似的

就是把编辑框2的内容全选上

然后赋为空串

到这里为止,我们所有代码都编写完成了

我们来编译一下

编译成功

然后我们来执行

这个时候我们看Show1、Clear1

没有了

Show2、Clear2

Show2是给它显示

Transfer就把第一个编辑框内容传过来了

Undo就没传过来

好了,这个程序执行过程就是这样的

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-5-2笔记与讨论

也许你还感兴趣的课程:

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