友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第17部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
树型控件(TreeCtrl ) 主要用来显示树状结构数据 CTreeCtrl
选项卡控件(TabCtrl ) 主要用来显示多种重叠的相关对话框界面 CTabCtrl
5。1 静态文本(Static text)控件
静态文本控件是传统控件的一种,传统控件主要包括文本控件、命令按钮、选择框、单
选按钮、编辑框、列表框和组合框等,如图 5…1 所示。
…………………………………………………………Page 109……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
编辑框 单选按钮
复选框 组框
静态文本
列表框
组合框
普通按钮
图 5…1 主要传统控件样式
5。1。1 传统控件通知消息
在介绍静态文本控件的用法之前,先讲述传统控件的控件通知消息。控件通过向父窗口
发送控件通知消息来表明发生了某种事件。例如,在按钮上单击鼠标时,按钮控件会向父窗
口发送 BN_CLICKED 消息。传统控件的通知消息实际上是通过 WM_MAND 消息发给
父窗口的(滚动条除外 ),在该消息的 wParam 中含有通知消息码(如 BN_CLICKED )和控
件的 ID,在 lParam 中则包含了控件的句柄。
利用 ClassWizard 可以很容易地为控件通知消息加入消息映射和消息处理函数,这在上
一章中的对话框应用程序中已经讲解过了。传统控件的消息映射宏是ON_XXXX,其中XXXX
表示通知消息码,如 BN_CLICKED 。ON_XXXX 消息映射宏格式如下,该宏有两个参数,
一个是控件的 ID,一个是消息处理函数名:
ON_XXXX(nID;memberFxn)
消息处理函数的声明形式如下:
afx_msg void memberFxn();
有时,为了处理方便,需要把多个 ID 连续的控件发出的相同消息映射到同一个处理函
数上,这时就要用到 ON_CONTROL_RANGE 宏。例如,要处理一组单选按钮发出的
BN_CLICKED 消息,相应的消息映射如下:
ON_CONTROL_RANGE(BN_CLICKED;IDC_FIRST;IDC_LAST;OnRadioClicked)
ON_CONTROL_RANGE 消息映射宏的第一个参数是控件消息码,第二和第三个参数分
别指明了一组连续的控件 ID 中的头一个和最后一个 ID,最后一个参数是消息处理函数名。
函数 OnRadioClicked 的声明如下,该函数比上面的 OnAdd…memberFxn 多了一个参数 nID
以说明发送通知消息的控件 ID 。
afx_msg void OnRadioClicked(UINT nID);
·100 ·
…………………………………………………………Page 110……………………………………………………………
第 5 章 常用控件
另外需要注意的是:ClassWizard 不支持 ON_CONTROL_RANGE 宏,所以需要手工建立
消息映射和消息处理函数。
5。1。2 静态控件的使用
静态控件主要起说明和装饰作用,包括静态文本(Static Text )控件和图片(Picture )控
件两类。静态文本控件用来显示文本信息 。静态控件封装在 MFC 的 CStatic 类中,成员函数
Create 负责创建静态控件,该函数的声明如下:
BOOL Create( LPCTSTR lpszText; DWORD dwStyle; const RECT& rect; CWnd* pParentWnd; UINT nID =
0xffff );
其中参数 lpszText 指定了控件中显示的文本内容,dwStyle 指定了静态控件的风格,如表
5…2 所示。rect 是一个对 RECT 或 CRect 结构的引用,用来说明控件的位置和尺寸。pParentWnd
指向父窗口,该参数不能为 NULL 。nID 则说明了控件的 ID 。如果控件创建成功,该函数返
回 TRUE,否则返回 FALSE 。
表 5…2 静态控件风格
控件风格 含义
SS_BLACKFRAME 指定一个具有与窗口边界同色的框(默认为黑色)
SS_BLACKRECT 指定一个具有与窗口边界同色的实矩形(默认为黑色)
SS_CENTER 使显示的正文居中对齐,正文可以换行
SS_GRAYFRAME 指定一个具有与屏幕背景同色的边框
SS_GRAYRECT 指定一个具有与屏幕背景同色的实矩形
使控件显示一个在资源中定义的图标,图标的名字有 Create 函数的
SS_ICON
lpszText 参数指定
SS_LEFT 左对齐正文,正文能回绕
SS_LEFTNOWORDWRAP 左对齐正文,正文不能回绕
SS_NOPREFIX 使静态正文串中的&不是一个热键提示符
SS_NOTIFY 使控件能向父窗口发送鼠标事件消息
SS_RIGHT 右对齐正文,可以回绕
SS_SIMPLE 使静态正文在运行时不能被改变并使正文显示在单行中
SS_USERITEM 指定一个用户定义项
SS_WHITEFRAME 指定一个具有与窗口背景同色的框(默认为白色)
SS_WHITERECT 指定一个具有与窗口背景同色的实心矩形(默认为白色)
除了指定如表 5…2 所示的风格外,一般还要为控件指定 WS_CHILD 和 WS_VISIBLE 窗
口风格。一个典型的静态正文控件的风格为 WS_CHILD|WS_VISIBLE|SS_LEFT 。对于用对
话框模板编辑器创建的静态控件,可以在控件的属性对话框中指定控件风格。例如,可以在
静态正文控件的属性对话框中选择 Simple,这相当于指定了 SS_SIMPLE 风格,这在一定程
度上方便了控件的生成。
5。1。3 Cstatic 类的主要成员函数
CStatic 类主要的成员函数如表 5…3 所示,同时也可以利用 CWnd 类的成员函数
GetWindowText、SetWindowText 和 GetWindowTextLength 来查询和设置静态控件中显示的文
本信息。
·101 ·
…………………………………………………………Page 111……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
表 5…3 CStatic 类的主要成员函数
成员函数声明 用途
HBITMAP SetBitmap(HBITMAP hBitmap); 指定要显示的位图
HBITMAP GetBitmap() const; 获取由 SetBitmap 指定的位图
HICON SetIcon(HICON hIcon); 指定要显示的图标
HICON GetIcon() const; 获取由 SetIcon 指定的图标
HCURSOR SetCursor(HCURSOR hCursor); 指定要显示的光标图片
CURSOR GetCursor(); 获取由 SetCursor 指定的光标
HENHMETAFILE
指定要显示的增强图元文件
SetEnhMetaFile(HENHMETAFILE hMetaFile);
HENHMETAFILE GetEnhMetaFile() const; 获取由 SetEnhMetaFile 指定的图元文件
技巧:设置静态文本框的背景色和文本颜色
Windows 消息 WM_CTLCOLOR 用于控制对话框中控件的颜色,可以有选择性地设置静态
文本框控件的背景和颜色,如下面的代码段用于更改 ID 为 IDC_SMALL_STATIC 的静态文
本框的颜色和背景。
HBRUSH CRMBDlg::OnCtlColor(CDC* pDC; CWnd* pWnd; UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC; pWnd; nCtlColor);
// TODO: Change any attributes of the DC here
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
{
if(pWnd…》GetDlgCtrlID() == IDC_SMALL_STATIC)
{
pDC…》SetBkMode(TRANSPARENT);
pDC…》SetTextColor(RGB(10;10;255));
hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
}
else
{
hbr = CDialog::OnCtlColor(pDC;pWnd;nCtlColor);
}
}
break;
default:
break;
}
// TODO: Return a different brush if the default is not desired
return hbr;
·102 ·
…………………………………………………………Page 112……………………………………………………………
第 5 章 常用控件
}
5。2 文本编辑(Edit Box )控件
5。2。1 文本编辑控件的使用
文本编辑(Edit Box )控件是一种传统控件,实际上是一个简易的正文编辑器,用户可
以在编辑框中输入并编辑正文。
文本编辑框既可以是单行的,也可以是多行的,多行编辑框的编号是从零开始编排的。
在一个多行编辑框中,除了最后一行外,每一行的结尾处都有一对回车换行符(用“rn ”表
示),这对回车换行符是正文换行的标志,在屏幕上是不可见的。
文本编辑控件会向父窗口发出如表 5…4 所示的控件通知消息。
表 5…4 文本编辑控件的通知消息
通知消息 含义
编辑框的内容被用户改变了,与 EN_UPDATE 不同,该消息是在编辑框显示的正
EN_CHANGE
文被刷新后才发出的
EN_ERRSPACE 编辑框控件无法申请足够的动态内存来满足需要
EN_HSCROLL 用户在水平滚动条上单击鼠标
EN_KILLFOCUS 编辑框失去输入焦点
输 入 的 字 符 超 过 了 规 定 的 最 大 字 符 数 。 在 没 有 ES_AUTOHSCROLL 或
EN_MAXTEXT
ES_AUTOVSCROLL 的编辑框中,当正文超出了编辑框的边框时也会发出该消息
EN_SETFOCUS 编辑框获得输入焦点
EN_UPDATE 在编辑框准备显示改变了的正文时发送该消息
EN_VSCROLL 用户在垂直滚动条上单击鼠标
编辑框控件的相关操作函数封装在 MFC 类库中的 CEdit 类中。CEdit 类的成员函数 Create
用于创建按钮控件,该函数的声明如下:
BOOL Create(DWORD dwStyle;const RECT& rect;CWnd* pParentWnd;UINT nID);
其中参数 dwStyle 指定了编辑框控件风格,文本编辑控件的主要风格如表 5…5 所示。
rect 指定了编辑框的位置和尺寸。
pParentWnd 指定了父窗口,不能为 NULL 。文本编辑框的 ID 由 nID 指定。如果创建成
功,该函数返回 TRUE,否则返回 FALSE 。
表 5…5 文本编辑控件风格
控件风格 含义
当用户在行尾键入一个字符时,正文将自动向右滚动 10 个字符,当用户按回车
ES_AUTOHSCROLL
键时,正文总是滚向左边
ES_AUTOVSCROLL 当用户在最后一个可见行按回车键时,正文向上滚动一页
ES_CENTER 在多行编辑框中使正文居中
ES_LEFT 左对齐正文
ES_LOWERCASE 把用户输入的字母统统转换成小写字母
指定一个多行编辑器 。若多行编辑器不指定 ES_AUTOHSCROLL 风格,则会自
ES_MULTILINE 动换行,若不指定 ES_AUTOVSCROLL ,则多行编辑器会在窗口中正文装满时
发出警告声响
·103 ·
…………………………………………………………Page 113……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
续表
控件风格 含义
默认时,当编辑框失去输入焦点后会隐藏所选的正文,当获得输入焦点时又显
ES_NOHIDESEL
示出来。设置该风格可禁止这种默认行为
使编辑框中的正文可以在 ANSI 字符集和 OEM 字符集之间相互转换。这在编辑
ES_OEMCONVERT
框中包含文件名时是很有用的
ES_PASSWORD 使所有键入的字符都用“*”来显示
ES_RIGHT 右对齐正文
ES_UPPERCASE 把用户输入的字母统统转换成大写字母
ES_READONLY 将编辑框设置成只读的
使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择默
ES_WANTRETURN
认的命令按钮,这往往会导致对话框的关闭
除了表 5…5 中的风格外,一般还要为文本编辑控件指定 WS_CHILD 、WS_VISIBLE 、
WS_TABSTOP 和 WS_BORDER 等窗口风格。创建一个普通的单行编辑框应指定风格
WS_CHILD|WS_VISIBLE|WS_TABSTOP |WS_BORDER|ES_LEFT ,这将创建一个带边框、左
对 齐 正 文 、 可 水 平 滚 动 的 单 行 编 辑 器 。 要 创 建 一 个 普 通 多 行 编 辑 框 , 还 要 附 加
ES_MULTILINE|ES_WANTRETURN|ES_AUTOVSCROLL |WS_HSCROLL| WS_VSCROLL
风格,这将创建一个可水平和垂直滚动的,带有水平和垂直滚动条的多行编辑器。
对于用对话框模板编辑器创建的编辑框控件,可以在控件的属性对话框中指定表 5…5 中
列出的控件风格。例如,在属性对话框中选择 Multi…line 项,相当于指定了 ES_MULTILINE
风格。对话框模板编辑器中设置编辑框控件属性的 Edit Properties 对话框如图 5…2 所示。
图 5…2 Edit Properties 对话框
5。2。2 Cedit 类的主要成员函数
文本编辑控件支持剪贴板操作,CEdit 类提供了一些与剪贴板有关的成员函数,如表 5…6
所示。
表 5…6 与剪贴板有关的 CEdit 成员函数
成员函数声明 用途
void Clear() 清除编辑框中被选择的正文
void Copy() 把在编辑框中选择的正文拷贝到剪贴板中
void Cut() 清除编辑框中被选择的正文并把这些正文拷贝到剪贴板中
void Paste() 将剪贴板中的正文插入到编辑框的当前插入符处
撤消上一次键入 。对于单行编辑框,该函数总返回 TRUE,对于多行编辑
BOOL Undo()
框,返回 TRUE 表明操作成功,否则返回 FALSE
可以用下列 CEdit 或 CWnd 类的成员函数来查询编辑框。在学习下面的函数时,读者会
经常遇到术语“字符索引”。字符的字符索引是指从编辑框的开头字符开始的字符编号,它是
从零开始编号的 。也就是说,字符索引实际上是指当把整个编辑正文看作一个字符串数组时,
·104 ·
…………………………………………………………Page 114……………………………………………………………
第 5 章 常用控件
该字符所在的数组元素的下标。
1.GetWindowText()函数
该成员函数声明方式如下:
int GetWindowText(LPTSTR lpszStringBuf; int nMaxCount) const;
void GetWindowText(CString& rString) const;
这两个函数均是 CWnd 类的成员函数,可用来获得窗口的标题或控件中的正文。第一种
声明方式用 lpszStringBuf 参数指向的字符串数组作为拷贝正文的缓冲区,参数 nMaxCount
用于获取拷贝到缓冲区中的最大字符数,该函数返回以字节为单位的实际拷贝字符数(不包
括结尾的空字节 )。第二种声明方式用一个 CString 对象作为缓冲区。
2 .GetWindowTextLength()函数
该成员函数声明方式如下:
int GetWindowTextLength() const;
CWnd 的成员函数,可用来获得窗口的标题或控件中的正文的长度。
3 .GetSel()函数
该成员函数声明按如下方式进行声明:
DWORD GetSel() const;
void GetSel(int& nStartChar;int& nEndChar) const;
两个函数都是 CEdit 的成员函数,用来获得所选正文的位置。第一种声明方式用于返回
一个 DWORD 值,其中低位字节说明了被选择的正文开始处的字符索引,高位字节说明了选
择的正文结束处的最后一个字符的字符索引,如果没有正文被选择,那么返回的低位和高位
字节都是当前插入符所在字符的字符索引。第二种声明方式中的两个参数是两个引用,其含
义与第一种声明方式的低位和高位字节相同。
4 .LineFromChar() 函数
该成员函数声明方式如下:
int LineFromChar(int nIndex = – 1) const;
CEdit 的成员函数,仅用于多行编辑框,用来返回指定字符索引所在行的行索引(从零
开始编号)。参数 nIndex 指定了一个字符索引,如果 nIndex 是…1,那么函数将返回选择正文
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!