3_1、MFC常用控件用法

1、控件通用

1.1 变量命名

匈牙利命名法:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
基本原则是:变量名=属性+类型+对象描述。

  1. 属性部分
属性描述
全局变量g_
常量c_
c++类成员变量m_
静态变量s_
  1. 类型部分
前缀类型
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
  1. 描述部分
前缀类型
最大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参数中包含了控件的句柄。
消息就是由三个部分组成:

  1. 消息值
  2. wParam参数
  3. 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 编辑框创建与操作

两种方式:

  1. 从工具箱拖出;
  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类的主要成员函数

  1. 使用编辑框最重要的莫过于,获取和设置编辑框中的正文,它们对应的成员函数分别是GetWindowText和SetWindowText,这两个函数都是继承自CWnd类的成员函数,另外,还可以使用CWnd类的GetWindowTextLength函数获取编辑框中正文的长度。
  2. int LineFromChar(int nIndex = –1) const;
    返回多行编辑框中指定索引的字符所在行的行号(从零开始),只适用于多行编辑框。nIndex等于-1则返回所选择正文的第一个字符所在行的索引。如果没有选择正文,则返回当前行的行号。
  3. int LineIndex(int nLine = –1) const;
    返回由nLine指定行的起始字符在编辑框的整个字符串中的索引,只适用于多行编辑框。如果指定行超过编辑框的最大行数,则返回-1,而如果nLine为-1,则返回当前插入符所在行的起始字符的索引。
  4. void GetSel(int& nStartChar,int& nEndChar) const;
    获取选择正文的索引范围。nStartChar返回被选择正文的起始索引,nEndChar返回被选择正文的终止索引(不包括在选择范围内)。如果没有选择正文,则两者均为当前插入符的索引。
  5. void SetSel(int nStartChar,int nEndChar,BOOL bNoScroll=FALSE);
    选择编辑框中的正文。nStartChar为选择开始处的索引,nEndChar为选择结束处的索引。如果nStartChar为0并且nEndChar为-1,则选择所有正文,而如果nStartChar为-1则取消所有选择。bNoScroll为FALSE时滚动插入符并使之可见,为TRUE时不滚动。
  6. void ReplaceSel(LPCTSTR lpszNewText,BOOL bCanUndo = FALSE);
    用lpszNewText指向的字符串来替换选择的正文。如果bCanUndo为TRUE则替换可以被撤销。
  7. int GetLineCount() const;
    获取正文的行数,只适用于多行编辑框。如果编辑框没有正文则返回1。
  8. int LineLength( int nLine = –1 ) const;
    获取指定字符索引所在行的字节长度(行尾的回车和换行符不计算在内),参数nLine 说明了为字符索引。如果nLine 的值为-1,则函数返回当前行的长度(假如没有正文被选择),或选择正文占据的行的字符总数减去选择正文的字符数(假如有正文被选择)。若用于单行编辑框,则函数返回整个正文的长度。
  9. int GetLine( int nIndex, LPTSTR lpszBuffer ) const;
    int GetLine( int nIndex, LPTSTR lpszBuffer, int nMaxLength ) const;
    用来获得指定行的正文(不包括行尾的回车和换行符),只适用于多行编辑框。参数nIndex 是行号,lpszBuffer 指向存放正文的缓冲区,nMaxLength 规定了拷贝的最大字节数。若指定的行号小于编辑框的实际行数,函数返回实际拷贝的字节数,若指定的行号大于编辑框的实际行数,则函数返回0。需要注意的是,GetLine 函数不会在缓冲区中字符串的末尾添加字符串结束符(NULL)。
  10. UINT GetLimitText( ) const;
    获取编辑框能够接受的正文的最大字节数。
  11. void LimitText(int nChars = 0);
    设置用户在编辑框中可以输入的正文的最大长度(字节数)。如果nChars为0,则最大长度为UINT_MAX个字节。

3.3 应用实例

在这里插入图片描述

  1. 创建编辑框资源,设定表现形式:多行、外观、ID等;
  2. 创建编辑框控件变量;
  3. 函数操作:(初始化在父类的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)等。

  1. 命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图。
  2. 单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中状态具有互斥关系,即同组的单选按钮只能有一个被选中。单选按钮有选中和未选中两种状态,为选中状态时单选按钮中心会出现一个蓝点,以标识选中状态。
  3. 一般的复选框也是有选中和未选中两种状态,选中时复选框内会增加一个“√”,而三态复选框(设置了BS_3STATE风格)有选中、未选中和不确定三种状态,不确定状态时复选框内出现一个灰色“√”。

按钮控件会向父窗口发送通知消息,最常用的通知消息莫过于BN_CLICKED和BN_DOUBLECLICKED了。用户在按钮上单击鼠标时会向父窗口发送BN_CLICKED消息,双击鼠标时发送BN_DOUBLECLICKED消息。

4.2 按钮控件创建

创建方式:

  1. 工具箱生成;
  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类的主要成员函数

  1. HBITMAP SetBitmap(HBITMAP hBitmap);
    设置要在按钮中显示的位图。参数hBitmap为位图的句柄。返回值为按钮原来位图的句柄。

  2. HBITMAP GetBitmap( ) const;
    获取之前由SetBitmap函数设置的按钮位图的句柄。

  3. void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);
    设置按钮的风格。参数nStyle指定按钮的风格,bRedraw指定按钮是否重绘,为TRUE则重绘,否则不重绘,默认为重绘。

  4. UINT GetButtonStyle( ) const;
    获取按钮控件的风格。

  5. void SetCheck(int nCheck);
    设置按钮的选择状态。参数nCheck为0表示未选中状态,1表示选中状态,2表示不确定状态(仅用于复选框)。

  6. int GetCheck( ) const;
    获取按钮的选择状态。返回值的意义同SetCheck函数的nCheck参数。

  7. HCURSOR SetCursor(HCURSOR hCursor);
    设置要显示到按钮上的光标图。参数hCursor指定了光标的句柄。返回值为按钮原来光标的句柄。

  8. HCURSOR GetCursor( );
    获取之前由SetCursor设置的光标的句柄。

  9. HICON SetIcon(HICON hIcon);
    设置要在按钮上显示的图标。参数hIcon指定了图标的句柄。返回值为按钮原来图标的句柄。

  10. HICON GetIcon( ) const;
    获取之前由SetIcon设置的图标的句柄。

  11. void SetState(BOOL bHighlight);
    设置按钮的高亮状态。参数bHighlight指定按钮是否高亮显示,非0则高亮显示,否则取消高亮显示状态。

  12. UINT GetState( ) const;
    获取按钮控件的选择状态、高亮状态和焦点状态。我们可以通过将返回值与各个掩码相与来获得各种状态值,掩码与对应的相与结果说明如下:

    • 掩码0x0003:用来获取单选按钮或复选框的状态。相与结果为0表示未选中,1表示被选中,2表示不确定状态(仅用于复选框)。
    • 掩码0x0004:用来判断按钮是否是高亮显示。相与结果为非0值表示按钮是高亮显示的。当单击按钮并按住鼠标左键时,按钮会呈高亮显示。
    • 掩码0x0008:相与结果为非零值表示按钮拥有输入焦点。
  13. 下面再列出几个继承自CWnd类的成员函数,通过它们获取或设置按钮控件的状态非常方便,只需要知道按钮的ID。
    void CheckDlgButton(int nIDButton,UINT nCheck);
    用来设置按钮的选择状态。参数nIDButton指定了按钮的ID。nCheck的值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。

  14. UINT IsDlgButtonChecked(int nIDButton) const;
    返回复选框或单选按钮的选择状态。返回值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。

  15. void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);
    用来选择组中的一个单选按钮。参数nIDFirstButton指定了组中第一个按钮的ID,nIDLastButton指定了组中最后一个按钮的ID,nIDCheckButton指定了要选择的按钮的ID。

  16. int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);
    用来获得一组单选按钮中被选中按钮的ID。参数nIDFirstButton 说明了组中第一个按钮的ID,nIDLastButton 说明了组中最后一个按钮的ID。

  17. CWnd类的成员函数GetWindowText()、SetWindowText()等也可以用来获取或设置按钮中显示的文本。

  18. BOOL EnableWindow([in] HWND hWnd, [in] BOOL bEnable);启用或禁用指定窗口或控件的鼠标和键盘输入。 禁用输入时,窗口不会接收鼠标单击和按键等输入。 启用输入时,窗口会接收所有输入。

4.3 控件使用

  1. 单选按钮Radio Button、复选框Check Box的使用。
    在这里插入图片描述
    设置控件变量对象,用于获取复选框和单选框的状态。
    创建消息响应函数来处理发生的事件。

  2. 按钮控件的禁用和可用设置

    1. 获取按钮指针或引用:首先,你需要有一个指向你想要禁用的按钮的指针或引用。这通常是通过在对话框或窗口类中声明一个 CButton 或 CWnd(如果按钮是通过资源编辑器添加的)的成员变量,并在对话框或窗口的 DoDataExchange 函数中与其进行关联来实现的。
    2. 调用 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 创建控件

创建方式:

  1. 工具箱生成;
  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类的主要成员函数

  1. int GetCount( ) const;
    返回值:返回列表框中列表项的数目,如果发生错误则返回LB_ERR。
  2. int GetSel(int nIndex) const;
    参数:nIndex指定某个列表项的索引。
    返回值:返回nIndex指定列表项的状态。如果此列表项被选择了则返回一个正值,否则返回0,若发生错误则返回LB_ERR。
  3. int SetSel(int nIndex,BOOL bSelect = TRUE);
    此函数只用于多选列表框,使用它可以选择或取消选择指定的列表项。
    参数:nIndex指定某个列表项的索引,若为-1则相当于指定了所有列表项。bSelect为TRUE时选择指定列表项,否则取消选择指定列表项。
    返回值:如果发生错误则返回LB_ERR。
  4. int AddString(LPCTSTR lpszItem);
    此函数用来向列表框中添加字符串。如果列表框指定了LBS_SORT风格,字符串就被以排序顺序插入到列表框中,如果没有指定LBS_SORT风格,字符串就被添加到列表框的结尾。
    参数:lpszItem指定了要添加的字符串。
    返回值:返回字符串在列表框中添加的位置。如果发生错误则返回LB_ERR,内存不够则返回LB_ERRSPACE。
  5. int InsertString(int nIndex, LPCTSTR lpszItem);
    该函数用来在列表框中的指定位置插入字符串。与AddString函数不同的是,InsertString函数不会导致LBS_SORT风格的列表框重新排序。不要在具有LBS_SORT风格的列表框中使用InsertString函数,以免破坏列表项的次序。
    参数:。参数nIndex 给出了插入位置(索引),如果值为-1,则字符串将被添加到列表的末尾。参数lpszItem 指定了要插入的字符串。
    返回值:返回实际的插入位置,若发生错误,会返回LB_ERR 或LB_ERRSPACE。
  6. int DeleteString(UINT nIndex);
    该函数用于删除指定的列表项。
    参数:nIndex 指定了要删除项的索引。
    返回值:函数的返回值为剩下的列表项数目,如果nIndex 超过了实际的表项总数,则返回LB_ERR。
  7. void ResetContent();
    该函数用于清除所有列表项。
  8. int GetText(int nIndex,LPTSTR lpszBuffer) const;
    void GetText(int nIndex,CString& rString) const;

    这两个成员函数用于获取指定列表项的字符串。参数nIndex 指定了列表项的索引。参数lpszBuffer 指向一个接收字符串的缓冲区。引用参数rString 则指定了接收字符串的CString对象。第一个版本的函数会返回获得的字符串的长度,若出错,则返回LB_ERR;第二个版本的函数则不会。
  9. int GetTextLen(int nIndex) const;
    该函数返回指定列表项的字符串的字节长度。
    参数:nIndex 指定了列表项的索引。
    返回值:若出错则返回LB_ERR。
  10. int GetCurSel() const;
    该函数仅适用于单选列表框,用来返回当前被选择项的索引,如果没有列表项被选择或有错误发生,则函数返回LB_ERR。
  11. int SetCurSel(int nSelect);
    该函数仅适用于单选列表框,用来选择指定的列表项。该函数会滚动列表框以使选择项可见。参数nIndex 指定了列表项的索引,若为-1,那么将清除列表框中的选择。若出错函数返回LB_ERR。
  12. int GetSelCount() const;
    该函数仅用于多重选择列表框,它返回选择项的数目,若出错函数返回LB_ERR。
  13. int FindString(int nStartAfter,LPCTSTR lpszItem) const;
    该函数用于对列表项进行与大小写无关的搜索。参数nStartAfter 指定了开始搜索的位置,合理指定nStartAfter 可以加快搜索速度,若nStartAfter 为-1,则从头开始搜索整个列表。参数lpszItem 指定了要搜索的字符串。函数返回与lpszItem 指定的字符串相匹配的列表项的索引,若没有找到匹配项或发生了错误,则会返回LB_ERR。FindString 函数先从nStartAfter指定的位置开始搜索,若没有找到匹配项,则会从头开始搜索列表。只有找到匹配项,或对整个列表搜索完一遍后,搜索过程才会停止,所以不必担心会漏掉要搜索的列表项。
  14. int SelectString(int nStartAfter,LPCTSTR lpszItem);
    该函数仅适用于单选列表框,用来选择与指定字符串相匹配的列表项。该函数会滚动列表框以使选择项可见。参数的意义及搜索的方法与函数FindString 类似。如果找到了匹配的项,函数返回该项的索引,如果没有匹配的项,函数返回LB_ERR 并且当前的选择不被改变。

5.3 实例

在这里插入图片描述

  1. 创建资源;
  2. 设定控件变量和消息相应函数;
  3. 设定各个控件之间的配合关系。
  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VS2010之MFC入门到精通教程的pdf,共306页 ,10大章节,55小节。完整有图版 第一部分:VS2010/MFC 开发环境 VS2010/MFC 编程入门之前言 VS2010/MFC 编程入门之一(VS2010 与MSDN 安装过程图解) 第二部分:VS2010/MFC 应用程序框架 VS2010/MFC 编程入门之二(利用MFC 向导生成单文档应用程序框架) VS2010/MFC 编程入门之三(VS2010 应用程序工程中文件的组成结构) VS2010/MFC 编程入门之四(MFC 应用程序框架分析) VS2010/MFC 编程入门之五(MFC 消息映射机制概述) 第三部分:对话框 VS2010/MFC 编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC 编程入门之七(对话框:为对话框添加控件) VS2010/MFC 编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC 编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC 编程入门之十(对话框:设置对话框控件的Tab 顺序) VS2010/MFC 编程入门之十一(对话框:模态对话框及其弹出过程) VS2010/MFC 编程入门之十二(对话框:非模态对话框的创建及显示) VS2010/MFC 编程入门之十三(对话框:属性页对话框及相关类的介绍) VS2010/MFC 编程入门之十四(对话框:向导对话框的创建及显示) VS2010/MFC 编程入门之十五(对话框:一般属性页对话框的创建及显示) VS2010/MFC 编程入门之十六(对话框:消息对话框) VS2010/MFC 编程入门之十七(对话框:文件对话框) VS2010/MFC 编程入门之十八(对话框:字体对话框) VS2010/MFC 编程入门之十九(对话框:颜色对话框) 第四部分:常用控件 VS2010/MFC 编程入门之二十(常用控件:静态文本框) VS2010/MFC 编程入门之二十一(常用控件:编辑框Edit Control) VS2010/MFC 编程入门之二十二(常用控件:按钮控件Button、Radio Button 和Check Box) VS2010/MFC 编程入门之二十三(常用控件:按钮控件的编程实例) VS2010/MFC 编程入门之二十四(常用控件:列表框控件ListBox) VS2010/MFC 编程入门之二十五(常用控件:组合框控件Combo Box) VS2010/MFC 编程入门之二十六(常用控件:滚动条控件Scroll Bar) VS2010/MFC 编程入门之二十七(常用控件:图片控件Picture Control) VS2010/MFC 编程入门之二十八(常用控件:列表视图控件List Control 上) VS2010/MFC 编程入门之二十九(常用控件:列表视图控件List Control 下) VS2010/MFC 编程入门之三十(常用控件:树形控件Tree Control 上) VS2010/MFC 编程入门之三十一(常用控件:树形控件Tree Control 下) VS2010/MFC 编程入门之三十二(常用控件:标签控件Tab Control 上) VS2010/MFC 编程入门之三十三(常用控件:标签控件Tab Control 下) 第五部分:菜单、工具栏与状态栏 VS2010/MFC 编程入门之三十四(菜单:VS2010 菜单资源详解) VS2010/MFC 编程入门之三十五(菜单:菜单及CMenu 类的使用) VS2010/MFC 编程入门之三十六(工具栏:工具栏资源及CToolBar 类) VS2010/MFC 编程入门之三十七(工具栏:工具栏的创建、停靠与使用) VS2010/MFC 编程入门之三十八(状态栏的使用详解) 第六部分:文档、视图和框架 VS2010/MFC 编程入门之三十九(文档、视图和框架:概述) VS2010/MFC 编程入门之四十(文档、视图和框架:各对象之间的关系) VS2010/MFC 编程入门之四十一(文档、视图和框架:分割窗口) 第七部分:MFC 常用类 VS2010/MFC 编程入门之四十二(MFC 常用类:CString 类) VS2010/MFC 编程入门之四十三(MFC 常用类:CTime 类和CTimeSpan 类) VS2010/MFC 编程入门之四十四(MFC 常用类:定时器Timer) VS2010/MFC 编程入门之四十五(MFC 常用类:CFile 文件操作类) VS2010/MFC 编程入门之四十六(MFC 常用类:MFC 异常处理) 第八部分:字体和文本输出 VS2010/MFC 编程入门之四十七(字体和文本输出:CFont 字体类) VS2010/MFC 编程入门之四十八(字体和文本输出:文本输出) 第九部分:图形图像 VS2010/MFC 编程入门之四十九(图形图像:CDC 类及其屏幕绘图函数) VS2010/MFC 编程入门之五十(图形图像:GDI 对象之画笔CPen) VS2010/MFC 编程入门之五十一(图形图像:GDI 对象之画刷CBrush) 第十部分:Ribbon 界面开发 VS2010/MFC 编程入门之五十二(Ribbon 界面开发:创建Ribbon 样式的应用程序框架) VS2010/MFC 编程入门之五十三(Ribbon 界面开发:为Ribbon Bar 添加控件) VS2010/MFC 编程入门之五十四(Ribbon 界面开发:使用更多控件并为控件添加消息处理函数)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值