MFC常用控件
1、控件通用
1.1 变量命名
匈牙利命名法:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
基本原则是:变量名=属性+类型+对象描述。
- 属性部分
属性 | 描述 |
---|---|
全局变量 | g_ |
常量 | c_ |
c++类成员变量 | m_ |
静态变量 | s_ |
- 类型部分
前缀 | 类型 |
---|---|
a | 数组 (Array) |
b | 布尔值 (Boolean) |
by | 字节 (Byte) == 8 bit |
c | 有符号字符 (Char) |
cb | 无符号字符 (Char Byte,没有多少人用) |
cr | 颜色参考值 (ColorRef) |
cx,cy | 坐标差(长度 ShortInt) |
dw | 双字 (Double Word) == 4 Byte == 4 * 8 bit |
fn | 函数(function) |
h | 句柄(Handle) |
i | 整型(int) |
l | 长整型 (Long int) |
lp | 长指针(Long Pointer) |
m_ | 类的成员(member of a class) |
n | 短整型 (Short Int) |
np | 近指针(Near Pointer) |
p | 指针(Pointer) |
s | 字符串型(string) |
sz | 以字符’'结尾的字符串 (String with Zero End) |
w | 字(Word) == 2 Byte == 2 * 8 bit |
- 描述部分
前缀 | 类型 |
---|---|
最大 | Max |
最小 | Min |
初始化 | Init |
临时变量 | T(或Temp) |
源对象 | Src |
目的对象 | Dest |
1.2 ID命名
ID前缀 | 描述 |
---|---|
控件的ID命名前缀(Control) | IDC_ |
菜单的ID命名前缀(Menu) | IDM_ |
对话框的ID命名前缀(Dialog) | IDD_ |
资源的ID命名前缀(Resource) | IDR_ |
字符串的ID命名前缀(String) | IDS_ |
位图资源的ID命名前缀(Bitmap) | IDB_ |
按钮控件 | IDC_BTN_XX //BTN:Button |
编辑控件 | IDC_EDT_XX //EDT:EditBox |
列表控件 | IDC_LST_XX //LST:ListCtrl |
树表控件 | IDC_TRE_XX //TRE:TreeCtrl |
富文本控件 | IDC_RCH_XX //RCH:RichEdit |
静态本控件 | IDC_STT_XX //STT:StaticText |
组合框控件 | IDC_CMB_XX //CMB:ComboBox |
滚动条控件 | IDC_SCR_XX //SCR:ScrollBar |
滑动条控件 | IDC_SLD_XX //SLD:Slider |
多选项控件 | IDC_CHK_XX //CHK:CheckBox |
单选项控件 | IDC_RDB_XX //RDB:RadioButton |
1.3 控件通知消息
当控件有事件发生时,它会向父窗口发送通知消息。最常发生的事件就是鼠标单击了,此时控件会向父窗口发送BN_CLICKED消息,实际上也就是给父窗口发送WM_COMMAND消息,在wParam参数中包含有通知消息码(鼠标单击时的通知消息码就是BN_CLICKED)和控件ID,lParam参数中包含了控件的句柄。
消息就是由三个部分组成:
- 消息值
- wParam参数
- lParam参数
- 控件的消息映射宏的格式大致是:
ON_通知消息码(nID, memberFun)
nID参数是控件的ID,memberFun参数是消息处理函数名。例如,ON_BN_CLICKED(IDC_BUTTON1, &CDlg::OnBnClickedButton1)。此消息映射宏应添加到BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间。 - 消息处理函数声明的语法形式为:
afx_msg void memberFun();
2、静态文本框
静态文本框的一般作用,就是用于显示文字说明。MFC提供了CStatic类,封装了对静态文本框的所有操作。
如果我们想在程序中动态创建静态文本框,而不是像前面那样直接从Toolbox中拖到对话框模板上,那么就需要使用CStatic类的成员函数Create。Create函数的原型如下:
virtual BOOL Create(
LPCTSTR lpszText,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID = 0xffff
);
-
lpszText:指定要在控件中显示的文字。如果为NULL则不会显示任何文字。
-
dwStyle:指定静态控件的风格。静态文本框一般都是对话框或其他窗口的子窗口,而且是可见的,所以应该包含WS_CHILD 和WS_VISIBLE风格,另外,MSDN中说明,还可以为其设置“static control styles”中风格的任意组合。下面大概为大家说明几个风格:
-
rect:指定静态控件的位置和大小,它可以是RECT结构体类型,也可以是CRect类的对象。
-
pParentWnd:指定静态控件的父窗口,通常是一个CDialog对象,不能是NULL。
-
nID:指定静态控件的ID。
2.1 CStatic类的成员函数简介
CStatic类的主要成员函数,下面是成员函数列表。
除了上述成员函数外,由于CStatic是CWnd的派生类,CWnd的很多成员函数也可以使用,例如,GetWindowText、GetWindowRect、SetWindowText等。
3、 编辑框
编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本。
3.1 编辑框的通知消息
编辑框发生某些事件时会向父窗口发送通知消息。在对话框模板中的编辑框上点右键,选择“Add Event Handler”,为编辑框添加消息处理函数时,可以在“Message type”列表中看到这些消息。
通知消息 | 描述 |
---|---|
EN_CHANGE | 编辑框的内容被用户改变了,与EN_UPDATE 不同,该消息是在编辑框显示的正文被刷新后才发出的 |
EN_ERRSPACE | 编辑框控件无法申请足够的动态内存来满足需要 |
EN_HSCROLL | 用户在水平滚动条上单击鼠标 |
EN_KILLFOCUS | 编辑框失去输入焦点 |
EN_MAXTEXT | 输入的字符超过了规定的最大字符数。在没有ES_AUTOHSCROLL 或 |
ES_AUTOVSCROLL | 编辑框中,当正文超出了编辑框的边框时也会发出该消息 |
EN_SETFOCUS | 编辑框获得输入焦点 |
EN_UPDATE | 在编辑框准备显示改变了的正文时发送该消息 |
EN_VSCROLL | 用户在垂直滚动条上单击鼠标 |
3.2 编辑框创建与操作
两种方式:
- 从工具箱拖出;
- 使用函数动态创建,即调用CEdit类的成员函数Create。Create成员函数的原型如下:
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
- dwStyle:指定编辑框的风格。可以是MSDN中“edit styles”包含风格的任意组合。下面是“edit styles”的所有风格说明
设定参数 | 描述 |
---|---|
ES_AUTOHSCROLL | 当用户在行尾键入一个字符时,正文将自动向右滚动10 个字符,当用户按回车键时,正文总是滚向左边 |
ES_AUTOVSCROLL | 当用户在最后一个可见行按回车键时,正文向上滚动一页 |
ES_CENTER | 在多行编辑框中使正文居中 |
ES_LEFT | 左对齐正文 |
ES_LOWERCASE | 把用户输入的字母统统转换成小写字母 |
ES_MULTILINE | 指定一个多行编辑器。若多行编辑器不指定ES_AUTOHSCROLL 风格,则会自动换行,若不指定ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时发出警告声响 |
ES_NOHIDESEL | 默认时,当编辑框失去输入焦点后会隐藏所选的正文,当获得输入焦点时又显示出来。设置该风格可禁止这种默认行为 |
ES_NUMBER | 编辑框中只允许输入数字 |
ES_OEMCONVERT | 使编辑框中的正文可以在ANSI 字符集和OEM 字符集之间相互转换。这在编辑框中包含文件名时是很有用的 |
ES_PASSWORD | 使所有键入的字符都用“*”来显示 |
ES_READONLY | 将编辑框设置成只读的 |
ES_RIGHT | 右对齐正文 |
ES_UPPERCASE | 把用户输入的字母统统转换成大写字母 |
ES_WANTRETURN | 使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择默认的命令按钮,这往往会导致对话框的关闭 |
除了上面的风格外,编辑款一般还会设置WS_CHILD、WS_VISIBLE、WS_BORDER等窗口风格。另外,编辑框可以是多行的,也就是在编辑框中显示多行文字,这就需要设置ES_MULTILINE风格,如果想要多行编辑框支持回车键,则还要设置ES_WANTRETURN。
CEdit类的主要成员函数
- 使用编辑框最重要的莫过于,获取和设置编辑框中的正文,它们对应的成员函数分别是GetWindowText和SetWindowText,这两个函数都是继承自CWnd类的成员函数,另外,还可以使用CWnd类的GetWindowTextLength函数获取编辑框中正文的长度。
- int LineFromChar(int nIndex = –1) const;
返回多行编辑框中指定索引的字符所在行的行号(从零开始),只适用于多行编辑框。nIndex等于-1则返回所选择正文的第一个字符所在行的索引。如果没有选择正文,则返回当前行的行号。 - int LineIndex(int nLine = –1) const;
返回由nLine指定行的起始字符在编辑框的整个字符串中的索引,只适用于多行编辑框。如果指定行超过编辑框的最大行数,则返回-1,而如果nLine为-1,则返回当前插入符所在行的起始字符的索引。 - void GetSel(int& nStartChar,int& nEndChar) const;
获取选择正文的索引范围。nStartChar返回被选择正文的起始索引,nEndChar返回被选择正文的终止索引(不包括在选择范围内)。如果没有选择正文,则两者均为当前插入符的索引。 - void SetSel(int nStartChar,int nEndChar,BOOL bNoScroll=FALSE);
选择编辑框中的正文。nStartChar为选择开始处的索引,nEndChar为选择结束处的索引。如果nStartChar为0并且nEndChar为-1,则选择所有正文,而如果nStartChar为-1则取消所有选择。bNoScroll为FALSE时滚动插入符并使之可见,为TRUE时不滚动。 - void ReplaceSel(LPCTSTR lpszNewText,BOOL bCanUndo = FALSE);
用lpszNewText指向的字符串来替换选择的正文。如果bCanUndo为TRUE则替换可以被撤销。 - int GetLineCount() const;
获取正文的行数,只适用于多行编辑框。如果编辑框没有正文则返回1。 - int LineLength( int nLine = –1 ) const;
获取指定字符索引所在行的字节长度(行尾的回车和换行符不计算在内),参数nLine 说明了为字符索引。如果nLine 的值为-1,则函数返回当前行的长度(假如没有正文被选择),或选择正文占据的行的字符总数减去选择正文的字符数(假如有正文被选择)。若用于单行编辑框,则函数返回整个正文的长度。 - int GetLine( int nIndex, LPTSTR lpszBuffer ) const;
int GetLine( int nIndex, LPTSTR lpszBuffer, int nMaxLength ) const;
用来获得指定行的正文(不包括行尾的回车和换行符),只适用于多行编辑框。参数nIndex 是行号,lpszBuffer 指向存放正文的缓冲区,nMaxLength 规定了拷贝的最大字节数。若指定的行号小于编辑框的实际行数,函数返回实际拷贝的字节数,若指定的行号大于编辑框的实际行数,则函数返回0。需要注意的是,GetLine 函数不会在缓冲区中字符串的末尾添加字符串结束符(NULL)。 - UINT GetLimitText( ) const;
获取编辑框能够接受的正文的最大字节数。 - void LimitText(int nChars = 0);
设置用户在编辑框中可以输入的正文的最大长度(字节数)。如果nChars为0,则最大长度为UINT_MAX个字节。
3.3 应用实例
- 创建编辑框资源,设定表现形式:多行、外观、ID等;
- 创建编辑框控件变量;
- 函数操作:(初始化在父类的OnInitDialog()函数中)
m_editMultiLine.SetWindowText(_T("TNTLWT博客/software")); // 设置编辑框正文
m_editMultiLine.SetSel(6, 8); // 选择起始索引为6,终止索引为8(不包括在选择范围内)的正文,即“博客”
m_editMultiLine.ReplaceSel(_T("\r\nhttps://blog.csdn.net/qingttqing?type=blog")); // 替换内容
4、按钮控件
4.1 控件介绍
按钮控件包括命令按钮(Button)、单选按钮(Radio Button)和复选框(Check Box)等。
- 命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图。
- 单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中状态具有互斥关系,即同组的单选按钮只能有一个被选中。单选按钮有选中和未选中两种状态,为选中状态时单选按钮中心会出现一个蓝点,以标识选中状态。
- 一般的复选框也是有选中和未选中两种状态,选中时复选框内会增加一个“√”,而三态复选框(设置了BS_3STATE风格)有选中、未选中和不确定三种状态,不确定状态时复选框内出现一个灰色“√”。
按钮控件会向父窗口发送通知消息,最常用的通知消息莫过于BN_CLICKED和BN_DOUBLECLICKED了。用户在按钮上单击鼠标时会向父窗口发送BN_CLICKED消息,双击鼠标时发送BN_DOUBLECLICKED消息。
4.2 按钮控件创建
创建方式:
- 工具箱生成;
- 函数动态创建,即通过CButton类的成员函数Create来创建按钮。下面是Create函数的原型:
virtual BOOL Create(
LPCTSTR lpszCaption,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
- lpszCaption:指定按钮控件显示的文本。
- dwStyle:指定按钮控件的风格,可以设置为以下按钮风格的任意组合。
设定参数 | 描述 |
---|---|
BS_AUTOCHECKBOX | 同BS_CHECKBOX,不过单击鼠标时按钮会自动反转 |
BS_AUTORADIOBUTTON | 同BS_RADIOBUTTON,不过单击鼠标时按钮会自动反转 |
BS_AUTO3STATE | 同BS_3STATE,不过单击按钮时会改变状态 |
BS_CHECKBOX | 指定在矩形按钮右侧带有标题的选择框 |
BS_DEFPUSHBUTTON | 指定默认的命令按钮,这种按钮的周围有一个黑框,用户可以按回车键来快速选择该按钮 |
BS_GROUPBOX | 指定一个组框 |
BS_LEFTTEXT | 使控件的标题显示在按钮的左边 |
BS_OWNERDRAW | 指定一个自绘式按钮 |
BS_PUSHBUTTON | 指定一个命令按钮 |
BS_RADIOBUTTON | 指定一个单选按钮,在圆按钮的右边显示正文 |
BS_3STATE | 同BS_CHECKBOX,不过控件有3 种状态——选择、未选择和变灰 |
WS_TABSTOP | 使按钮控件具有tab停止属性,即按tab键切换焦点控件时能够将焦点停在按钮控件上 |
创建一组单选按钮时,第一个按钮的风格应设置为WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_AUTORADIOBUTTON,其他单选按钮的风格应为WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,不包含WS_TABSTOP和WS_GROUP。
CButton类的主要成员函数
-
HBITMAP SetBitmap(HBITMAP hBitmap);
设置要在按钮中显示的位图。参数hBitmap为位图的句柄。返回值为按钮原来位图的句柄。 -
HBITMAP GetBitmap( ) const;
获取之前由SetBitmap函数设置的按钮位图的句柄。 -
void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);
设置按钮的风格。参数nStyle指定按钮的风格,bRedraw指定按钮是否重绘,为TRUE则重绘,否则不重绘,默认为重绘。 -
UINT GetButtonStyle( ) const;
获取按钮控件的风格。 -
void SetCheck(int nCheck);
设置按钮的选择状态。参数nCheck为0表示未选中状态,1表示选中状态,2表示不确定状态(仅用于复选框)。 -
int GetCheck( ) const;
获取按钮的选择状态。返回值的意义同SetCheck函数的nCheck参数。 -
HCURSOR SetCursor(HCURSOR hCursor);
设置要显示到按钮上的光标图。参数hCursor指定了光标的句柄。返回值为按钮原来光标的句柄。 -
HCURSOR GetCursor( );
获取之前由SetCursor设置的光标的句柄。 -
HICON SetIcon(HICON hIcon);
设置要在按钮上显示的图标。参数hIcon指定了图标的句柄。返回值为按钮原来图标的句柄。 -
HICON GetIcon( ) const;
获取之前由SetIcon设置的图标的句柄。 -
void SetState(BOOL bHighlight);
设置按钮的高亮状态。参数bHighlight指定按钮是否高亮显示,非0则高亮显示,否则取消高亮显示状态。 -
UINT GetState( ) const;
获取按钮控件的选择状态、高亮状态和焦点状态。我们可以通过将返回值与各个掩码相与来获得各种状态值,掩码与对应的相与结果说明如下:- 掩码0x0003:用来获取单选按钮或复选框的状态。相与结果为0表示未选中,1表示被选中,2表示不确定状态(仅用于复选框)。
- 掩码0x0004:用来判断按钮是否是高亮显示。相与结果为非0值表示按钮是高亮显示的。当单击按钮并按住鼠标左键时,按钮会呈高亮显示。
- 掩码0x0008:相与结果为非零值表示按钮拥有输入焦点。
-
下面再列出几个继承自CWnd类的成员函数,通过它们获取或设置按钮控件的状态非常方便,只需要知道按钮的ID。
void CheckDlgButton(int nIDButton,UINT nCheck);
用来设置按钮的选择状态。参数nIDButton指定了按钮的ID。nCheck的值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。 -
UINT IsDlgButtonChecked(int nIDButton) const;
返回复选框或单选按钮的选择状态。返回值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。 -
void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);
用来选择组中的一个单选按钮。参数nIDFirstButton指定了组中第一个按钮的ID,nIDLastButton指定了组中最后一个按钮的ID,nIDCheckButton指定了要选择的按钮的ID。 -
int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);
用来获得一组单选按钮中被选中按钮的ID。参数nIDFirstButton 说明了组中第一个按钮的ID,nIDLastButton 说明了组中最后一个按钮的ID。 -
CWnd类的成员函数GetWindowText()、SetWindowText()等也可以用来获取或设置按钮中显示的文本。
-
BOOL EnableWindow([in] HWND hWnd, [in] BOOL bEnable);启用或禁用指定窗口或控件的鼠标和键盘输入。 禁用输入时,窗口不会接收鼠标单击和按键等输入。 启用输入时,窗口会接收所有输入。
4.3 控件使用
-
单选按钮Radio Button、复选框Check Box的使用。
设置控件变量对象,用于获取复选框和单选框的状态。
创建消息响应函数来处理发生的事件。 -
按钮控件的禁用和可用设置
- 获取按钮指针或引用:首先,你需要有一个指向你想要禁用的按钮的指针或引用。这通常是通过在对话框或窗口类中声明一个 CButton 或 CWnd(如果按钮是通过资源编辑器添加的)的成员变量,并在对话框或窗口的 DoDataExchange 函数中与其进行关联来实现的。
- 调用 Enable 函数:然后,你可以调用该按钮的 Enable 函数,并传递 FALSE 作为参数来禁用它。
// 假设你有一个CButton成员变量m_myButton
CButton m_myButton;
// 在对话框的某个函数中(例如OnInitDialog)禁用按钮
void CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
// 禁用m_myButton按钮
m_myButton.EnableWindow(FALSE);
5、列表框控件
列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选中的项会高亮显示。列表框可分为单选列表框和多选列表框,顾名思义,单选列表框中一次只能选择一个列表项,而多选列表框可以同时选择多个列表项。
5.1 通知消息
列表框也会向父窗口发送通知消息。这些通知消息及含义如下:
通知消息 | 描述 |
---|---|
LBN_DBLCLK | 用户用鼠标双击了一列表项,只有具有LBS_NOTIFY 的列表框才能发送该消息 |
LBN_ERRSPACE | 列表框不能申请足够的动态内存来满足需要 |
LBN_KILLFOCUS | 列表框失去输入焦点 |
LBN_SELCANCEL | 当前的选择被取消,只有具有LBS_NOTIFY 的列表框才能发送该消息 |
LBN_SELCHANGE | 单击鼠标选择了一列表项,只有具有LBS_NOTIFY 的列表框才能发送该消息 |
LBN_SETFOCUS | 列表框获得输入焦点 |
WM_CHARTOITEM | 当列表框收到WM_CHAR 消息后, 向父窗口发送该消息, 只有具有LBS_WANTKEYBOARDINPUT 风格的列表框才会发送该消息 |
WM_VKEYTOITEM | 当列表框收到WM_KEYDOWN 消息后,向父窗口发送该消息,只有具有LBS_WANTKEYBOARDINPUT 风格的列表框才会发送该消息 |
5.2 创建控件
创建方式:
- 工具箱生成;
- 函数动态创建,即通过CListBox类的Create成员函数。Create成员函数的原型如下:
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
- 参数rect指定了列表框的位置和尺寸,pParentWnd为父窗口的指针,nID用于指定列表框控件的ID。最后重点讲讲参数dwStyle,它指定了列表框控件的风格,以下是各种风格说明:
设定参数 | 描述 |
---|---|
LBS_EXTENDEDSEL | 支持多重选择,在点击列表项时按住Shift 键或Ctrl 键即可选择多个项 |
LBS_HASSTRINGS | 指定一个含有字符串的自绘式列表框 |
LBS_MULTICOLUMN | 指定一个水平滚动的多列列表框, 通过调用CListBox::SetColumnWidth 来设置每列的宽度 |
LBS_MULTIPLESEL | 支持多重选择。列表项的选择状态随着用户对该项单击或双击鼠标而翻转 |
LBS_NOINTEGRALHEIGHT | 列表框的尺寸由应用程序而不是Windows 指定。通常,Windows指定尺寸会使列表项的某些部分隐藏起来 |
LBS_NOREDRAW | 当选择发生变化时防止列表框被更新,可发送消息改变该风格 |
LBS_NOTIFY | 当用户单击或双击鼠标时通知父窗口 |
LBS_OWNERDRAWFIXED | 指定自绘式列表框,即由父窗口负责绘制列表框的内容,并且列表项有相同的高度 |
LBS_OWNERDRAWVARIABLE | 指定自绘式列表框,并且列表项有不同的高度 |
LBS_SORT | 使插入列表框中的项按升序排列 |
LBS_STANDARD | 相当于指定了WS_BORDER |
LBS_USETABSTOPS | 使列表框在显示列表项时识别并扩展制表符(‘\t’),默认的制表宽度是32 个对话框单位 |
LBS_WANTKEYBOARDINPUT | 允许列表框的父窗口接收WM_VKEYTOITEM 和WM_CHARTOITEM 消息,以响应键盘输入 |
LBS_DISABLENOSCROLL | 使列表框在不需要滚动时显示一个禁止的垂直滚动条 |
dwStyle可以是以上所列风格的组合。与其他控件一样,除了这些风格一般还要为列表框控件设置WS_CHILD、WS_VISIBLE、WS_TABSTOP、WS_BORDER、WS_VSCROLL等风格。一般创建单选列表框时,风格要设置为:WS_CHILD|WS_VISIBLE|WS_TABSTOP|LBS_STANDARD,如果不希望列表框项排序显示则应去掉LBS_STANDARD。创建多选列表框时,只需要在单选列表框风格后添加LBS_MULTIPLESEL或LBS_EXTENDEDSEL风格。
CListBox类的主要成员函数
- int GetCount( ) const;
返回值:返回列表框中列表项的数目,如果发生错误则返回LB_ERR。 - int GetSel(int nIndex) const;
参数:nIndex指定某个列表项的索引。
返回值:返回nIndex指定列表项的状态。如果此列表项被选择了则返回一个正值,否则返回0,若发生错误则返回LB_ERR。 - int SetSel(int nIndex,BOOL bSelect = TRUE);
此函数只用于多选列表框,使用它可以选择或取消选择指定的列表项。
参数:nIndex指定某个列表项的索引,若为-1则相当于指定了所有列表项。bSelect为TRUE时选择指定列表项,否则取消选择指定列表项。
返回值:如果发生错误则返回LB_ERR。 - int AddString(LPCTSTR lpszItem);
此函数用来向列表框中添加字符串。如果列表框指定了LBS_SORT风格,字符串就被以排序顺序插入到列表框中,如果没有指定LBS_SORT风格,字符串就被添加到列表框的结尾。
参数:lpszItem指定了要添加的字符串。
返回值:返回字符串在列表框中添加的位置。如果发生错误则返回LB_ERR,内存不够则返回LB_ERRSPACE。 - int InsertString(int nIndex, LPCTSTR lpszItem);
该函数用来在列表框中的指定位置插入字符串。与AddString函数不同的是,InsertString函数不会导致LBS_SORT风格的列表框重新排序。不要在具有LBS_SORT风格的列表框中使用InsertString函数,以免破坏列表项的次序。
参数:。参数nIndex 给出了插入位置(索引),如果值为-1,则字符串将被添加到列表的末尾。参数lpszItem 指定了要插入的字符串。
返回值:返回实际的插入位置,若发生错误,会返回LB_ERR 或LB_ERRSPACE。 - int DeleteString(UINT nIndex);
该函数用于删除指定的列表项。
参数:nIndex 指定了要删除项的索引。
返回值:函数的返回值为剩下的列表项数目,如果nIndex 超过了实际的表项总数,则返回LB_ERR。 - void ResetContent();
该函数用于清除所有列表项。 - 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。 - int GetCurSel() const;
该函数仅适用于单选列表框,用来返回当前被选择项的索引,如果没有列表项被选择或有错误发生,则函数返回LB_ERR。 - int SetCurSel(int nSelect);
该函数仅适用于单选列表框,用来选择指定的列表项。该函数会滚动列表框以使选择项可见。参数nIndex 指定了列表项的索引,若为-1,那么将清除列表框中的选择。若出错函数返回LB_ERR。 - int GetSelCount() const;
该函数仅用于多重选择列表框,它返回选择项的数目,若出错函数返回LB_ERR。 - int FindString(int nStartAfter,LPCTSTR lpszItem) const;
该函数用于对列表项进行与大小写无关的搜索。参数nStartAfter 指定了开始搜索的位置,合理指定nStartAfter 可以加快搜索速度,若nStartAfter 为-1,则从头开始搜索整个列表。参数lpszItem 指定了要搜索的字符串。函数返回与lpszItem 指定的字符串相匹配的列表项的索引,若没有找到匹配项或发生了错误,则会返回LB_ERR。FindString 函数先从nStartAfter指定的位置开始搜索,若没有找到匹配项,则会从头开始搜索列表。只有找到匹配项,或对整个列表搜索完一遍后,搜索过程才会停止,所以不必担心会漏掉要搜索的列表项。 - int SelectString(int nStartAfter,LPCTSTR lpszItem);
该函数仅适用于单选列表框,用来选择与指定字符串相匹配的列表项。该函数会滚动列表框以使选择项可见。参数的意义及搜索的方法与函数FindString 类似。如果找到了匹配的项,函数返回该项的索引,如果没有匹配的项,函数返回LB_ERR 并且当前的选择不被改变。
5.3 实例
- 创建资源;
- 设定控件变量和消息相应函数;
- 设定各个控件之间的配合关系。