2024年4月29日发(作者:)

VC++MFC编程技术--第五章 列表框控件(CListBox)和列表控件(

列表框主要用于输入,它允许用户从所列出的表项中进行单项或多项选择,

被选择的项呈高亮度显示.列表框具有边框,并且一般带有一个垂直滚动条.列

表框分单选列表框和多重选择列表框两种.单选列表框一次只能选择一个列表项,

而多重选择列表框可以进行多重选择.

5.1 MFC的CListBox类

MFC的CListBox类封装了列表框.CListBox类的Create成员函数负责列表

框的创建,该函数的声明是

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT

nID );

参数dwStyle指定了列表框控件的风格,如表6.10所示,dwStyle可以是

这些风格的组合.rect说明了控件的位置和尺寸.pParentWnd指向父窗口,该

参数不能为NULL。nID则说明了控件的ID。如果创建成功,该函数返回TRUE,

否则返回FALSE.

5.2 CListBox类的成员函数

CListBox类的成员函数有数十个之多.需要说明的是,可以用索引来指定

列表项,索引是从零开始的.

CListBox成员函数提供了下列函数用于插入和删除列表项

int AddString( LPCTSTR lpszItem );

该函数用来往列表框中加入字符串,其中参数lpszItem指定了要添加的字符

串.函数的返回值是加入的字符串在列表框中的位置,如果发生错误,会返回

LB_ERR或LB_ERRSPACE(内存不够).如果列表框未设置LBS_SORT风格,那么

字符串将被添加到列表的末尾,如果设置了LBS_SORT风格,字符串会按排序规

律插入到列表中.

int InsertString( int nIndex, LPCTSTR lpszItem );

该函数用来在列表框中的指定位置插入字符串.参数nIndex给出了插入位置(索

引),如果值为-1,则字符串将被添加到列表的末尾.参数lpszItem指定了要

插入的字符串.函数返回实际的插入位置,若发生错误,会返回LB_ERR或

LB_ERRSPACE.与AddString函数不同,InsertString函数不会导致LBS_SORT

风格的列表框重新排序.不要在具有LBS_SORT风格的列表框中使用

InsertString函数,以免破坏列表项的次序.

int DeleteString( UINT nIndex );

该函数用于删除指定的列表项,其中参数nIndex指定了要删除项的索引.函数

的返回值为剩下的表项数目,如果nIndex超过了实际的表项总数,则返回LB_ERR.

void ResetContent( );

该函数用于清除所有列表项.

int Dir( UINT attr, LPCTSTR lpszWildCard );

该函数用来向列表项中加入所有与指定通配符相匹配的文件名或驱动器名.参数

attr为文件类型的组合。参数lpszWildCard指定了通配符(如*.cpp,*.*等).

Dir函数attr参数的含义

0x0000

0x0001

0x0002

0x0004

0x0010

0x0020

0x4000

0x8000

普通文件(可读写的文件).

只读文件

隐藏文件.

系统文件.

目录.

文件的归档位已被设置.

包括了所有与通配符相匹配的驱动器.

排除标志.若指定该标志,则只列出指定类型的文件名,否

则,先要列出普通文件,然后再列出指定的文件.

CListBox用于搜索、查询和设置列表框的成员函数.

int GetCount( ) const;

该函数返回列表项的总数,若出错则返回LB_ERR.

int FindString( int nStartAfter, LPCTSTR lpszItem ) const;

该函数用于对列表项进行与大小写无关的搜索.参数nStartAfter指定了开始搜

索的位置, 合理指定nStartAfter可以加快搜索速度,若nStartAfter为-1,则

从头开始搜索整个列表.参数lpszItem指定了要搜索的字符串.函数返回与

lpszItem指定的字符串相匹配的列表项的索引,若没有找到匹配项或发生了错

误,函数会返回LB_ERR.FindString函数先从nStartAfter指定的位置开始搜

索,若没有找到匹配项,则会从头开始搜索列表.只有找到匹配项,或对整个列

表搜索完一遍后,搜索过程才会停止,所以不必担心会漏掉要搜索的列表项.

int GetText( int nIndex, LPTSTR lpszBuffer ) const;

void GetText( int nIndex, CString& rString ) const;

用于获取指定列表项的字符串.参数nIndex指定了列表项的索引.参数

lpszBuffer指向一个接收字符串的缓冲区.引用参数rString则指定了接收字

符串的CString对象.第一个版本的函数会返回获得的字符串的长度,若出错,

则返回LB_ERR.

int GetTextLen( int nIndex ) const;

该函数返回指定列表项的字符串的字节长度.参数nIndex指定了列表项的索

引.若出错则返回LB_ERR.