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

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

7-5-1在线视频

7-5-1

下一节:7-5-2

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

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

下面我们开始介绍列表框控件

列表框控件在MFC编程里面用得实际上是非常多的

列表框常用于从众多数据中选某一项

列表框经常用在对话框里

比如用列表框选择文件名、目录等

列表框有一个预定义的键盘接口

用户可以用键盘上的箭头和PageUp或PageDown键

在列表框中进行数据的选择

或者通过适当的样式设置

允许与Shift或Ctrl键组合使用

列表框控件的类的结构是这样的

也是在CWnd下面的

列表框一般具有如下特点

首先可以提供大量的可选项

需要时可以自动显示滚动条

关于滚动条的问题已经给大家介绍过了

此外还可以设置单选(单个选项)

或多选(多个选项)的功能

单选是,单击列表项

被选的项以“反相”的形式显示被选中

再次单击时恢复为非选中状态

列表框的样式有这些

比如说,LBS就是列表框的缩写

样式DISABLENOSCROLL就是

当列表框不需要滚动条时,滚动条无效

比如NOTIFY

当用户单击或双击时向父窗口发送消息

SORT说明列表框里面的文件

或者字符串,文件名实际上是字符串

SORT是列表项按字母顺序排列

标准是NOTIFY、SORT、VSCROLL和BORDER的组合

CListBox的消息映像项有这些

DBCLICK是双击

还有SELCHANGE、SELCANCEL、KILLFOCUS、ERRSPACE等等

这些在教材里面写得很详细

在这里就不细说了

消息映像项使用下面的一些基本格式

也是ON_Message,前面是什么样的消息

然后这里是控件消息

还有类的方法

类的方法是处理消息的父类方法的名字

所有者的类声明中有它的方法原型

也是在afx_msg里面有一个方法的名字

这个跟前面介绍的消息映像项的构架是一样的

列表框类的主要方法有这些

首先,有一些方法是通用方法

比如说GetCount()

这是获得列表框中列表项的数目

比如说GetHorizontalExtent()

是获得列表框的水平滚动宽度

以及GetItemData()

是获得列表框有关项的值

这是一些通用的方法

单项选择特定方法,是这样的

列表框的默认模式是单选项模式

也就是说所有的通用方法都适用于单选项列表框

只有两个类的方法专门处理单选项列表框

一个是GetCurSel()

是获得当前选择列表框项的下标

下标处置是基于0的

Cur是当前的,Current

然后Set Current Selection

这个是设置列表框的字符串

多项选择的话,是这样的

多选项列表框扩展了标准单项选择列表框的能力

可以解决在一个列表框中选择多项带来的复杂性

比如 这里面有“第五交响曲_命运”

和“姑苏春晓”

这两个是连续的

但是“蓝色多瑙河”和“土耳其进行曲”

跟前面不连续

但是“蓝色多瑙河”跟“土耳其进行曲”是连续的

所以在这里大家看到了

有不连续的四个选项被选上了

所以这就是多个选项

特定多选项列表框的CListBox类方法有这些

比如说获得多项选择列表框的当前定位项的下标

是这个函数

这里面有这么多函数

比如说获得多项选择列表框中具有光标矩形项的下标

这里比如说SetItemRange()

就是切换多选列表框内范围选择的状态

这些方法在我们教材里面都可以找到

或者在MSDN里面都可以看到

CListBox指定列表框中字符串的方法有如下

因为CListBox 也就是列表框

显示的更多的是文件名、路径名等等

这些名字通常都是以字符串的形式出现

所以要想向列表框中加入一个字符串

或者从列表框中删除一个字符串

或者从当前目录加文件名到列表框等等

这些操作都是在列表框操作中经常会遇到的

FindString()是在列表框中搜索一个字符串

实际上就是搜索文件名

是在列表框中搜索第一个与指定搜索字符串匹配的字符串

InsertString()是在列表框指定下标处插入一个字符串

ResetContent()是清除列表框中的所有项

SelectString()是在单选列表框中搜索并选择一个字符串

当然还有一些虚拟的方法

CListBox类还声明了几个虚拟的方法

你可以从CListBox类中派生一些类替换到你的类中

比如CharToItem() 这里从字面就可以理解它的意思

可以替换此方法来为自绘列表框处理WM-CHAR

是由MFC调用以得到排序的自绘列表框中新项的位置

用户从自绘列表框中删除一项时MFC调用这个方法

是当确定自绘列表框项必须重绘时MFC调用此方法

MeasureItem()是当一个自绘列表框被创建时

MFC调用这个方法来决定列表框的维数

VKeyToItem()是用户可替换此方法

来处理具有LBS_WANTKEYBOARDINPUT样式的列表框的WM_KEYDOWN

系统列出一些虚拟方法

如何创建和初始化CListBox对象

仍然可以用C++关键字new和构造函数为CListBox对象

分配一个实例

然后初始化CListBox对象并赋予它一个Windows类表框

通过方法Create()设置列表框的参数和样式

比如,下面的代码分配一个CListBox对象

并返回指向这个对象的指针

用new关键字, new CListBox

返回一个对象的指针

指针pMyListBox是用CListBox的Create()方法

进行初始化

比如设置窗口的样式

设置列表框控件的大小和位置

指向所有者的指针

这是父窗口的指针

以及它的控件标识

那我们说列表框与应用程序之间消息是如何传递的

首先我们介绍列表框向应用程序发送消息

当用户与列表框交互时

列表框向应用程序发出WM_COMMAND消息

这个消息字参数的高字节为列表框的消息通知码

比如DBCLICK 低字节为控件的标识值

当然通知码还有SELCHANGE

是列表框中的用户选择已经发生改变

比如DBCLICK双击

比如SELCANCLE列表框中的选择被取消

以及SETFOCUS是列表框收到输入焦点

或者KILLFOCUS是列表框失去输入焦点

刚才谈的是列表框向应用程序发送消息

应用程序如何向列表框发送消息呢

应用程序对列表框的操作是通过

SendMessage或者SendDlgItemMessage来完成的

这里有一些消息的标识

我就不一一介绍了

大家可以参照我们的教材

下面我们通过一个例子来介绍列表框的应用

这个例子是这样的

创建一个单选的列表框

并在列表框中列出当前目录的文件

双击后删除该项

就是双击里面所列出的某一个文件

然后就把这个文件它的标识的字符串

也就是在这列表框里面显示的字符串删掉

当然这个文件并没有从磁盘里面删掉

只是从列表框里面删掉

下面我们给大家一起来实现一下这个功能

我们创建一个应用程序

它的名字叫7_4

仍然创建的是对话框的应用程序

我们把自动生成的一些控件都给去掉了

我们下面要做的事情

是在对话框上放置一个ListBox

这么一个控件

这个控件的ID给他设置一下

可以设置IDC_LIST_DIR

我们设置了这么一个控件

然后我们再安放一个静态控件

我们也把这个Static静态控件的ID

设置成IDC_STATIC_DIR

这个ListBox控件用来显示文件的名称

这个静态控件Static用来显示

当前显示的文件所在的目录

然后我们下面要做的事情就是

为这个ListBox控件

增加一个变量

这个变量的类型是CListBox的类型

增加的成员变量给他起名为m_list

好 我们就完成了

这个时候由于程序一运行

在列表框里面就要显示相应的内容

这样我们就需要在初始化里面

OnInitDialog里面需要做一些动作

我们加一些代码

这些代码是什么呢?

这个是当前的目录

这是最大的路径是什么

这个是系统宏定义里面已经定义了

我们不管,我们定义了这个变量

就是当前路径里面最大值

定义了这个字符串

也是最大值的个数

也就是这里面能显示的最多的字符串的个数

然后在这里面定义一个当前目录的变量

然后把数组名赋给这个变量

这个变量大家知道

是LPTSTR,是指向字符串的指针变量

这是字符型数组

这个把字符型数组首地址就赋给了这个指针

然后这个是GetCurrentDirectory

这是获取当前的目录

获取当前目录之后,我们通过DlgDirList

使设置列表框显示条目为当前目录下的所有文件

我们用的参数是当前Current Directory

是当前目录,然后

在哪里显示呢,在这个列表框中显示

当前选择的内容在这里显示

下面我要实现双击条目删除的功能

这个需要在列表框里面增加对双击消息的响应

我们回到对话框里面

对他进行消息响应

添加事件处理函数

添加事件处理函数是double click双击

缺省的函数名是这个 我们就采用

我们在这里面输入消息响应的代码

代码这里定义了i

从m_list列表框里面GetCurSel()

光标点到哪个地方就把当前的内容选择上

定义了一个字符串CString变量

然后GetText 把第i号的字符串的内容

放到str里面来

实际这个str字符型变量已经保存了

列表框里面第i项的字符串内容

这时候我们把第i项删除DeleteString

然后我们要通过一个消息框

显示哪一项被删除了

这样我们定义了一个CString msg的消息

Item这是一个字符串原样显示

加上这个str,加上第i号的str内容

然后Item 这个内容

这个项已经从列表框里面删除

这个消息框里面就显示出来了

我们不妨给他运行一下

这个时候在这个static控件里面

就显示的是当前的路径

是d盘下的VC++下的7_4下的7_4

这个时候我如果选择这个文件

如果这个时候我选择7_4Dlg.h

然后双击它

就弹出这个消息框

我刚才双击了7_4Dlg.h后

就出现了一个消息框

告诉我Item这个消息已经被删除

实际上这句话就是在这个地方的

给大家演示一下

就是这个地方

这个str就是我选择的第i项的内容

就是7_4Dlg.h

这项的内容把文件名放到str里面去了

然后“has been deleted”这句话跟“Item”这句话

以及str内容 接成一个字符串放到msg里面

然后通过AfxMessageBox把接成的字符串显示出来

这时候大家看在这里面

7_4Dlg.h已经没有了

已经从这里删掉了

那么我们再删掉一个ReadMe.txt

双击,它就说

“Item ReadMe.txt has been deleted from the listbox”

这时候大家看没有了

ReadMe.txt没有了

接着resource.h也删掉

resource.h也没有了

这个程序实现了我们预定的功能

这个程序我们就介绍到这里

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

也许你还感兴趣的课程:

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