第 28 章
字之间的转换界面
技巧:改变控件的字体
控件也是窗口,可以调用CWnd::SetFont 指定控件的新字体。该函数中使用一个Cfont 指
针,以保证在控件撤消之前不能撤消字体对象。如下面的代码将下压按钮时的字体改为8
号Arial 字体。
private :
CFont m_font ;
// Set font in class implcomntation (.Cpp file ). Note m_wndButton is a
/commber variable added by ClassWizard.DDX routines hook thecommber
//variable to a dialog button contrlo.
BOOL CSampleDialog::OnInitDialog()
{
...
//Create an 8-point Arial font
m_font.CreateFont (MulDiv (8,pDC->GetDeviceCaps(LOGPIXELSY),72),\
,0,0,FW_NORMAL,0,0,0,ANSI_CHARSER,OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,\
DRAFT_QUALITY,VARIABLE_PITCH|FF_SWISS,_T("Arial"));
//Set font for push button .
m_wndButton.SetFont (&m _font );
...
}
5.5 列表框(List Box)控件
5.5.1 列表框控件的使用
列表框也是一种传统控件,主要用于用户输入,它允许用户从所列出的表项中进行单项
或多项选择,被选择的项呈高亮度显示。列表框具有边框,并且一般带有一个垂直滚动条。
列表框分单选列表框和多重选择列表框两种。在单选列表框中一次只能选择一个列表项,而
在多重选择列表框中可以进行多重选择。列表框会向父窗口发送如表5-10 所示的通知消息。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·118·
表5-10 列表框控件的通知消息
消息 含义
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 风格的列表框才会发送该消息
列表框控件封装在MFC 的CListBox 类中,CListBox 类的Create 成员函数用于列表框的
创建,该函数的声明如下。
BOOL Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID);
参数dwStyle 指定了列表框控件的风格,如表5-11 所示,dwStyle 可以是这些风格的组
合。rect 说明了控件的位置和尺寸。pParentWnd 指向父窗口,该参数不能为NULL。nID 则
说明了控件的ID。如果创建成功,该函数返回TRUE,否则返回FALSE。
表5-11 列表框控件的风格
风格 含义
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 使chā入列表框中的项按升序排列
LBS_STANDARD 相当于指定了WS_BORDER|WS_VSCROLL|LBS_SORT
LBS_USETABSTOPS
使列表框在显示列表项时识别并扩展制表符(‘\t’),默认的制表宽
度是32 个对话框单位
LBS_WANTKEYBOARDINPUT
允许列表框的父窗口接收WM_VKEYTOITEM 和
WM_CHARTOITEM 消息,以响应键盘输入
LBS_DISABLENOSCROLL 使列表框在不需要滚动时显示一个禁止的垂直滚动条
除了上表中的风格外,一般还要为列表框控件指定WS_CHILD、WS_VISIBLE、
WS_TABSTOP、WS_BORDER 和WS_VSCROLL 等风格。要创建一个普通的单选择列表框,
应指定的风格为WS_CHILD|WS_VISIBLE|WS_TABSTOP|LBS_STANDARD。要创建一个多
重选择列表框,应该在单选择列表框风格的基础上再加上 LBS_MULTIPLESEL 或LBS_
EXTENDEDSEL。如果不希望列表框排序,就不能使用LBS_STANDARD 风格。
枫叶文学网www.fywxw.com
第5 章 常用控件
·119·
对于用对话框模板编辑器创建的列表框控件,可以在控件的属xìng对话框中指定表5-11 中
列出的控件风格。例如,在属xìng对话框中选择Sort 项,相当与指定了LBS_SORT 风格。
5.5.2 ClistBox 类的主要成员函数
CListBox 类的成员函数有很多,分别介绍如下:
1.AddString()函数
该成员函数声明如下:
int AddString(LPCTSTR lpszItem);
该函数用来向列表框中加入字符串,其中参数lpszItem 指定了要添加的字符串。函数的
返回值是加入的字符串在列表框中的位置,如果发生错误,会返回LB_ERR 或LB_ERRSPACE
(内存不够)。如果列表框未设置LBS_SORT 风格,那么字符串将被添加到列表的末尾,如果
设置了LBS_SORT 风格,字符串会按排序规律chā入到列表中。
2.InsertString()函数
该成员函数声明如下:
int InsertString(int nIndex, LPCTSTR lpszItem);
该函数用来在列表框中的指定位置chā入字符串。参数nIndex 给出了chā入位置(索引),
如果值为-1,则字符串将被添加到列表的末尾。参数lpszItem 指定了要chā入的字符串。该函
数返回实际的chā入位置,若发生错误,会返回LB_ERR 或LB_ERRSPACE。与AddString 函
数不同的是,InsertString 函数不会导致LBS_SORT 风格的列表框重新排序。不要在具有
LBS_SORT 风格的列表框中使用InsertString 函数,以免破坏列表项的次序。
3.DeleteString()函数
该成员函数声明如下:
int DeleteString(UINT nIndex);
该函数用于删除指定的列表项,其中参数nIndex 指定了要删除项的索引。函数的返回值
为剩下的表项数目,如果nIndex 超过了实际的表项总数,则返回LB_ERR。
4.ResetContent()函数
该成员函数声明如下:
void ResetContent();
该函数用于清除所有列表项。
5.GetCount()函数
该成员函数声明如下:
int GetCount() const;
该函数返回列表项的总数,若出错则返回LB_ERR。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·120·
6.FindString()函数
该成员函数声明如下:
int FindString(int nStartAfter,LPCTSTR lpszItem) const;
该函数用于对列表项进行与大小写无关的搜索。参数nStartAfter 指定了开始搜索的位置,
合理指定nStartAfter 可以加快搜索速度,若nStartAfter 为-1,则从头开始搜索整个列表。参
数lpszItem 指定了要搜索的字符串。函数返回与lpszItem 指定的字符串相匹配的列表项的索
引,若没有找到匹配项或发生了错误,则会返回LB_ERR。FindString 函数先从nStartAfter
指定的位置开始搜索,若没有找到匹配项,则会从头开始搜索列表。只有找到匹配项,或对
整个列表搜索完一遍后,搜索过程才会停止,所以不必担心会漏掉要搜索的列表项。
7.GetText()函数
该成员函数声明如下:
int GetText(int nIndex,LPTSTR lpszBuffer) const;
void GetText(int nIndex,CString& rString) const;
这两个成员函数用于获取指定列表项的字符串。参数nIndex 指定了列表项的索引。参数
lpszBuffer 指向一个接收字符串的缓冲区。引用参数rString 则指定了接收字符串的CString 对
象。第一个版本的函数会返回获得的字符串的长度,若出错,则返回LB_ERR;第二个版本
的函数则不会。
8.GetTextLen()函数
该成员函数声明如下:
int GetTextLen(int nIndex) const;
该函数返回指定列表项的字符串的字节长度。参数nIndex 指定了列表项的索引。若出错
则返回LB_ERR。
9.GetItemData()函数
该成员函数声明如下:
DWORD GetItemData(int nIndex) const;
每个列表项都有一个32 位的附加数据。该函数返回指定列表项的附加数据,参数nIndex
指定了列表项的索引。若出错则函数返回LB_ERR。
10.SetItemData()函数
该成员函数声明如下:
int SetItemData(int nIndex, DWORD dwItemData);
该函数用来指定某一列表项的32 位附加数据。参数nIndex 指定了列表项的索引。
dwItemData 是要设置的附加数据值。
11.GetSel()函数
该成员函数声明如下:
枫叶文学网www.fywxw.com
第5 章 常用控件
·121·
int GetSel(int nIndex) const;
该函数返回指定列表项的状态。参数nIndex 指定了列表项的索引。如果查询的列表项被
选择了,函数返回一个正值,否则返回0,若出错则返回LB_ERR。
12.GetCurSel()函数
该成员函数声明如下:
int GetCurSel() const;
该函数仅适用于单选择列表框,用来返回当前被选择项的索引,如果没有列表项被选择
或有错误发生,则函数返回LB_ERR。
13.SetCurSel()函数
该成员函数声明如下:
int SetCurSel(int nSelect);
该函数仅适用于单选择列表框,用来选择指定的列表项。该函数会滚动列表框以使选择
项可见。参数nIndex 指定了列表项的索引,若为-1,那么将清除列表框中的选择。若出错函
数返回LB_ERR。
14.SelectString()函数
松语文学免费小说阅读_www.16sy.com
技巧:改变控件的字体
控件也是窗口,可以调用CWnd::SetFont 指定控件的新字体。该函数中使用一个Cfont 指
针,以保证在控件撤消之前不能撤消字体对象。如下面的代码将下压按钮时的字体改为8
号Arial 字体。
private :
CFont m_font ;
// Set font in class implcomntation (.Cpp file ). Note m_wndButton is a
/commber variable added by ClassWizard.DDX routines hook thecommber
//variable to a dialog button contrlo.
BOOL CSampleDialog::OnInitDialog()
{
...
//Create an 8-point Arial font
m_font.CreateFont (MulDiv (8,pDC->GetDeviceCaps(LOGPIXELSY),72),\
,0,0,FW_NORMAL,0,0,0,ANSI_CHARSER,OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,\
DRAFT_QUALITY,VARIABLE_PITCH|FF_SWISS,_T("Arial"));
//Set font for push button .
m_wndButton.SetFont (&m _font );
...
}
5.5 列表框(List Box)控件
5.5.1 列表框控件的使用
列表框也是一种传统控件,主要用于用户输入,它允许用户从所列出的表项中进行单项
或多项选择,被选择的项呈高亮度显示。列表框具有边框,并且一般带有一个垂直滚动条。
列表框分单选列表框和多重选择列表框两种。在单选列表框中一次只能选择一个列表项,而
在多重选择列表框中可以进行多重选择。列表框会向父窗口发送如表5-10 所示的通知消息。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·118·
表5-10 列表框控件的通知消息
消息 含义
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 风格的列表框才会发送该消息
列表框控件封装在MFC 的CListBox 类中,CListBox 类的Create 成员函数用于列表框的
创建,该函数的声明如下。
BOOL Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID);
参数dwStyle 指定了列表框控件的风格,如表5-11 所示,dwStyle 可以是这些风格的组
合。rect 说明了控件的位置和尺寸。pParentWnd 指向父窗口,该参数不能为NULL。nID 则
说明了控件的ID。如果创建成功,该函数返回TRUE,否则返回FALSE。
表5-11 列表框控件的风格
风格 含义
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 使chā入列表框中的项按升序排列
LBS_STANDARD 相当于指定了WS_BORDER|WS_VSCROLL|LBS_SORT
LBS_USETABSTOPS
使列表框在显示列表项时识别并扩展制表符(‘\t’),默认的制表宽
度是32 个对话框单位
LBS_WANTKEYBOARDINPUT
允许列表框的父窗口接收WM_VKEYTOITEM 和
WM_CHARTOITEM 消息,以响应键盘输入
LBS_DISABLENOSCROLL 使列表框在不需要滚动时显示一个禁止的垂直滚动条
除了上表中的风格外,一般还要为列表框控件指定WS_CHILD、WS_VISIBLE、
WS_TABSTOP、WS_BORDER 和WS_VSCROLL 等风格。要创建一个普通的单选择列表框,
应指定的风格为WS_CHILD|WS_VISIBLE|WS_TABSTOP|LBS_STANDARD。要创建一个多
重选择列表框,应该在单选择列表框风格的基础上再加上 LBS_MULTIPLESEL 或LBS_
EXTENDEDSEL。如果不希望列表框排序,就不能使用LBS_STANDARD 风格。
枫叶文学网www.fywxw.com
第5 章 常用控件
·119·
对于用对话框模板编辑器创建的列表框控件,可以在控件的属xìng对话框中指定表5-11 中
列出的控件风格。例如,在属xìng对话框中选择Sort 项,相当与指定了LBS_SORT 风格。
5.5.2 ClistBox 类的主要成员函数
CListBox 类的成员函数有很多,分别介绍如下:
1.AddString()函数
该成员函数声明如下:
int AddString(LPCTSTR lpszItem);
该函数用来向列表框中加入字符串,其中参数lpszItem 指定了要添加的字符串。函数的
返回值是加入的字符串在列表框中的位置,如果发生错误,会返回LB_ERR 或LB_ERRSPACE
(内存不够)。如果列表框未设置LBS_SORT 风格,那么字符串将被添加到列表的末尾,如果
设置了LBS_SORT 风格,字符串会按排序规律chā入到列表中。
2.InsertString()函数
该成员函数声明如下:
int InsertString(int nIndex, LPCTSTR lpszItem);
该函数用来在列表框中的指定位置chā入字符串。参数nIndex 给出了chā入位置(索引),
如果值为-1,则字符串将被添加到列表的末尾。参数lpszItem 指定了要chā入的字符串。该函
数返回实际的chā入位置,若发生错误,会返回LB_ERR 或LB_ERRSPACE。与AddString 函
数不同的是,InsertString 函数不会导致LBS_SORT 风格的列表框重新排序。不要在具有
LBS_SORT 风格的列表框中使用InsertString 函数,以免破坏列表项的次序。
3.DeleteString()函数
该成员函数声明如下:
int DeleteString(UINT nIndex);
该函数用于删除指定的列表项,其中参数nIndex 指定了要删除项的索引。函数的返回值
为剩下的表项数目,如果nIndex 超过了实际的表项总数,则返回LB_ERR。
4.ResetContent()函数
该成员函数声明如下:
void ResetContent();
该函数用于清除所有列表项。
5.GetCount()函数
该成员函数声明如下:
int GetCount() const;
该函数返回列表项的总数,若出错则返回LB_ERR。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·120·
6.FindString()函数
该成员函数声明如下:
int FindString(int nStartAfter,LPCTSTR lpszItem) const;
该函数用于对列表项进行与大小写无关的搜索。参数nStartAfter 指定了开始搜索的位置,
合理指定nStartAfter 可以加快搜索速度,若nStartAfter 为-1,则从头开始搜索整个列表。参
数lpszItem 指定了要搜索的字符串。函数返回与lpszItem 指定的字符串相匹配的列表项的索
引,若没有找到匹配项或发生了错误,则会返回LB_ERR。FindString 函数先从nStartAfter
指定的位置开始搜索,若没有找到匹配项,则会从头开始搜索列表。只有找到匹配项,或对
整个列表搜索完一遍后,搜索过程才会停止,所以不必担心会漏掉要搜索的列表项。
7.GetText()函数
该成员函数声明如下:
int GetText(int nIndex,LPTSTR lpszBuffer) const;
void GetText(int nIndex,CString& rString) const;
这两个成员函数用于获取指定列表项的字符串。参数nIndex 指定了列表项的索引。参数
lpszBuffer 指向一个接收字符串的缓冲区。引用参数rString 则指定了接收字符串的CString 对
象。第一个版本的函数会返回获得的字符串的长度,若出错,则返回LB_ERR;第二个版本
的函数则不会。
8.GetTextLen()函数
该成员函数声明如下:
int GetTextLen(int nIndex) const;
该函数返回指定列表项的字符串的字节长度。参数nIndex 指定了列表项的索引。若出错
则返回LB_ERR。
9.GetItemData()函数
该成员函数声明如下:
DWORD GetItemData(int nIndex) const;
每个列表项都有一个32 位的附加数据。该函数返回指定列表项的附加数据,参数nIndex
指定了列表项的索引。若出错则函数返回LB_ERR。
10.SetItemData()函数
该成员函数声明如下:
int SetItemData(int nIndex, DWORD dwItemData);
该函数用来指定某一列表项的32 位附加数据。参数nIndex 指定了列表项的索引。
dwItemData 是要设置的附加数据值。
11.GetSel()函数
该成员函数声明如下:
枫叶文学网www.fywxw.com
第5 章 常用控件
·121·
int GetSel(int nIndex) const;
该函数返回指定列表项的状态。参数nIndex 指定了列表项的索引。如果查询的列表项被
选择了,函数返回一个正值,否则返回0,若出错则返回LB_ERR。
12.GetCurSel()函数
该成员函数声明如下:
int GetCurSel() const;
该函数仅适用于单选择列表框,用来返回当前被选择项的索引,如果没有列表项被选择
或有错误发生,则函数返回LB_ERR。
13.SetCurSel()函数
该成员函数声明如下:
int SetCurSel(int nSelect);
该函数仅适用于单选择列表框,用来选择指定的列表项。该函数会滚动列表框以使选择
项可见。参数nIndex 指定了列表项的索引,若为-1,那么将清除列表框中的选择。若出错函
数返回LB_ERR。
14.SelectString()函数
松语文学免费小说阅读_www.16sy.com