友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第19部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
pParentWnd 指向父窗口,该参数不能为 NULL 。nID 是按钮的 ID 。如果创建成功,该函数返
回 TRUE,否则返回 FALSE 。
表 5…9 按钮的风格
消息 含义
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_CHILD 、WS_VISIBLE 和 WS_TABSTOP
等窗口风格,WS_TABSTOP 风格使控件具有 Tabstop 属性。创建一个普通按钮应指定的风格
为 WS_CHILD|WS_VISIBLE|WS_TABSTOP 。 创 建 一 个 普 通 检 查 框 可 以 指 定 风 格 为
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX 。创建组中第一个单选按钮
指定风格 WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_AUTORADIOBUTTON ,
组中其他单选按钮指定风格时则不应该包括 WS_TABSTOP 和 WS_GROUP 。
对于用对话框模板编辑器创建的按钮控件,可以在控件的属性对话框中指定表 5…8 中列
出的控件风格。例如,在命令按钮的属性对话框中选择 Default button ,相当于指定了
BS_DEFPUSHBUTTON 。
5。4。2 Cbutton 类的主要成员函数
下面介绍 CButton 类的主要的成员函数,这些成员函数在实际编程过程中有很大的用处。
1.GetState()函数
该成员函数声明如下:
UINT GetState() const;
该函数返回按钮控件的各种状态。可以用下列屏蔽值与函数的返回值相与,以获得各种
·112 ·
…………………………………………………………Page 122……………………………………………………………
第 5 章 常用控件
信息。返回值的状态主要定义有下面几种。
o 0x0003 :用来获取检查框或单选按钮的状态。0 表示未选中,1 表示被选中,2 表示不
确定状态(仅用于检查框 )。
o 0x0004 :用来判断按钮是否是高亮度显示。非 0 值意味着按钮是高亮度显示的。当单
击按钮并按住鼠标左键时,按钮会呈高亮度显示。
o 0x0008 :非零值表示按钮拥有输入焦点。
2 .SetState()函数
该成员函数声明如下:
void SetState(BOOL bHighlight);
当参数 bHeightlight 值为 TRUE 时,该函数将按钮设置为高亮度状态,否则,去除按钮
的高亮度状态。
3 .GetCheck()函数
该成员函数声明如下:
int GetCheck() const;
返回检查框或单选按钮的选择状态 。返回值 0 表示按钮未被选择,1 表示按钮被选择,2
表示按钮处于不确定状态(仅用于检查框 )。
4 .SetCheck()函数
该成员函数声明如下:
void SetCheck(int nCheck);
设置检查框或单选按钮的选择状态。参数 nCheck 的值含义与 GetCheck 返回值相同。
5 .GetButtonStyle()函数
该成员函数声明如下:
UINT GetButtonStyle() const;
该函数用于获得按钮控件的 BS_XXXX 风格。
6 .SetButtonStyle()函数
该成员函数声明如下:
void SetButtonStyle( UINT nStyle; BOOL bRedraw = TRUE );
设置按钮的风格,参数 nStyle 指定了按钮的风格,bRedraw 为 TRUE 则重绘按钮,否则
就不重绘。
7 .SetBitmap()函数
该成员函数声明如下:
HBITMAP SetBitmap(HBITMAP hBitmap);
设置按钮显示的位图,参数 hBitmap 指定了位图的句柄,该函数还会返回按钮原来的位图。
·113 ·
…………………………………………………………Page 123……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
8.GetBitmap()函数
该成员函数声明如下:
HBITMAP GetBitmap() const;
返回以前用 SetBitmap 设置的按钮位图。
9 .SetIcon()函数
该成员函数声明如下:
HICON SetIcon( HICON hIcon);
设置按钮显示的图标,参数 hIcon 指定了图标的句柄,该函数还会返回按钮原来的图标。
10.GetIcon()函数
该成员函数声明如下:
HICON GetIcon() const;
返回以前用 SetIcon 设置的按钮图标。
11.SetCursor()函数
该成员函数声明如下:
HCURSOR SetCursor(HCURSOR hCursor);
设置按钮上显示的光标图,参数 hCursor 指定了光标的句柄,该函数还会返回按钮原来
的光标。
12.SetCursor()函数
该成员函数声明如下:
HCURSOR GetCursor();
返回以前用 GetCursor 设置的光标。
13.与按钮有关的 CWnd 成员函数
另外,可以使用下列的一些与按钮控件有关的 CWnd 成员函数来设置或查询按钮的状态。
使用这些函数的好处在于不必构建按钮控件对象,只要知道按钮的 ID,就可以直接设置或查
询按钮。
void CheckDlgButton(int nIDButton;UINT nCheck );
用来设置按钮的选择状态 。参数 nIDButton 指定了按钮的 ID 。nCheck 的值为 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 。
·114 ·
…………………………………………………………Page 124……………………………………………………………
第 5 章 常用控件
UINT IsDlgButtonChecked(int nIDButton) const;
返回检查框或单选按钮的选择状态 。返回值为 0 表示按钮未被选择,为 1 表示按钮被选
择,为 2 表示按钮处于不确定状态(仅用于检查框 )。
同时还可以调用 CWnd 成员函数 GetWindowText()、GetWindowTextLength()和 SetWindow
…Text()来查询或设置按钮中显示的正文。
实例 5…1:控件基本使用方法实例。源代码在光盘中“05实例 5…1RMB ”目录下。
下面通过一个基于对话框的例子来说明控件的基本使用方法,该示例实现了将阿拉伯数
字转换为汉字数字的功能。
主要代码如下:
const char* RMB(double rmb)
{
if(rmb19) return NULL;
int i=strlen(tmp)…1;c;
char *srcPtr=tmp;*dstPtr=result;
bool bPrevZero=false;
for(; *srcPtr; srcPtr++;i……) {
if(*srcPtr==’。’) continue;
c=*srcPtr…’0’;
if(c!=0) {
strcpy(dstPtr;CCC'c'); dstPtr+=2;
if(srcPtr==tmp && c==1 && strcmp(QQQ'i';〃拾〃)==0) dstPtr…=2;
strcpy(dstPtr;QQQ'i'); dstPtr+=2;
bPrevZero=false;
continue;
}
if(bPrevZero) {
if(strcmp(QQQ'i';〃 圆〃)==0 || strcmp(QQQ'i';〃万〃)==0 || strcmp(QQQ'i';〃亿〃)==0) {
dstPtr…=2; *dstPtr=0;
if(strcmp(dstPtr…2;〃亿〃)) {strcpy(dstPtr;QQQ'i'); dstPtr+=2;}
bPrevZero=false;
·115 ·
…………………………………………………………Page 125……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
}
} else {
if(strcmp(QQQ'i';〃 圆〃) && strcmp(QQQ'i';〃万〃) && strcmp(QQQ'i';〃亿〃)) {
strcpy(dstPtr;〃零〃); dstPtr+=2;
bPrevZero=true;
}else {
strcpy(dstPtr;QQQ'i'); dstPtr+=2;
bPrevZero=false;
}
}
}
i=strlen(result);
if(strcmp(result+i…2;〃零〃)==0) result'i…2'=0;
tmp'0'=result'0'; tmp'1'=result'1'; tmp'2'=0;
if(strcmp(tmp;〃 圆〃)==0) {
if(result'2'==0) strcpy(result;〃零圆〃);
else {
tmp'0'=result'2'; tmp'1'=result'3'; tmp'2'=0;
return strcmp(tmp;〃零〃)==0 ? result+4 : result+2 ;
}
}
return result;
}
界面上的“Convert ”按钮消息处理函数如下:
void CRMBDlg::OnConvertButton()
{
if(UpdateData(TRUE))
{
m_szCha = RMB(m_double);
UpdateData(FALSE);
}
else
{
m_szCha = 〃〃;
UpdateData(FALSE);
}
}
运行界面如图 5…4 所示,详细的源代码设计可参考附带光盘。
·116 ·
…………………………………………………………Page 126……………………………………………………………
第 5 章 常用控件
图 5…4 阿拉伯数字与汉字数字之间的转换界面
技巧:改变控件的字体
控件也是窗口,可以调用 CWnd::SetFont 指定控件的新字体。该函数中使用一个 Cfont 指
针,以保证在控件撤消之前不能撤消字体对象。如下面的代码将下压按钮时的字体改为 8
号 Arial 字体。
private :
CFont m_font ;
// Set font in class implementation (。Cpp file )。 Note m_wndButton is a
//member variable added by ClassWizard。DDX routines hook the member
//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 所示的通知消息。
·117 ·
…………………………………………………………Page 127……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
表 5…10 列表框控件的通知消息
消息 含义
LBN_DBLCLK 用户用鼠标双击了一列表项,只有具有 LBS_NOTIFY 的列表框才能发送该消息
LBN_ERRSPACE 列表框不能申请足够的动态内存来满足需要
LBN_KILLFOCUS 列表框失去输入焦点
LBN_SELCANCEL 当前的选择被取消,只有具有 LBS_NOTIFY 的列表框才能发送该消息
LBN_SELCHANGE 单击鼠标选择了一列表项,只有具有 LBS_NOTIFY 的列表框才能发送该消息
LBN_SETFOCUS 列表框获得输入焦点
当 列 表 框 收 到 WM_CHAR 消 息 后 , 向 父 窗 口 发 送 该 消 息 , 只 有 具 有
WM_CHARTOITEM
LBS_WANTKEYBOARDINPUT 风格的列表框才会发送该消息
当列表框收到 WM_KEYDOWN 消息后,向父窗口发送该消息,只有具有
WM_VKEYTOITEM
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 列表框控件的风格
风格 含义
支持多重选择,在点击列表项时按住 Shift 键或 Ctrl 键即可选择
LBS_EXTENDEDSEL
多个项
LBS_HASSTRINGS 指定一个含有字符串的自绘式列表框
指 定 一 个 水 平 滚 动 的 多 列 列 表 框 , 通 过 调 用
LBS_MULTICOLUMN
CListBox::SetColumnWidth 来设置每列的宽度
支持多重选择 。列表项的选择状态随着用户对该项单击或双击鼠
LBS_MULTIPLESEL
标而翻转
列表框的尺寸由应用程序而不是 Windows 指定。通常,Windows
LBS_NOINTEGRALHEIGHT
指定尺寸会使列表项的某些部分隐藏起来
LBS_NOREDRAW 当选择发生变化时防止列表框被更新,可发送消息改变该风格
LBS_NOTIFY 当用户单击或双击鼠标时通知父窗口
指定自绘式列表框,即由父窗口负责绘制列表框的内容,并且列
LBS_OWNERDRAWFIXED
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!