VC语言6.0程序设计从入门到精通-第31部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
重现。函数的功能、函数名,甚至函数的参数都是类似的。为了方便学习,下面在介绍
CboBox 类的成员函数时,采用了与对应的 CEdit 或 CListBox 成员函数相比较的做法。
在成员函数的列表中,分别列出了成员函数名、对应的 CEdit 或 CListBox 成员函数以及二者
之间的不同之处。
针对编辑框组件的主要成员函数如表 5…14 所示。该表的前 3 个函数实际上是 CWnd 类的
成员函数,可用来查询和设置编辑框组件。
表 5…14 针对编辑框组件的 CboBox 成员函数
成员函数名 对应的 CEdit 成员函数 与 CEdit 成员函数的不同之处
CWnd::GetWindowText CWnd::GetWindowText 无
CWnd::SetWindowText CWnd::SetWindowText 无
CWnd::GetWindowTextLength CWnd::GetWindowTextLength 无
GetEditSel GetSel 仅函数名不同
SetEditSel SetSel 函数名不同,且无 bNoScroll 参数
Clear Clear 无
·124 ·
…………………………………………………………Page 134……………………………………………………………
第 5 章 常用控件
续表
成员函数名 对应的 CEdit 成员函数 与 CEdit 成员函数的不同之处
Copy Copy 无
Cut Cut 无
Paste Paste 无
与 CListBox 的成员函数类似,针对列表框组件的 CboBox 成员函数也可以分为 3 类。
表 5…15 列出了用于插入和删除列表项的成员函数,表 5…16 列出了用于搜索、查询和设置列
表框的成员函数,与列表项的选择有关的成员函数如表 5…17 所示。需要指出的是,如果这些
函数出错,则返回 CB_ERR,而不是 LB_ERR 。另外,排序的组合框具有的是 CBS_SORT 风
格,而不是 LBS_SORT 。
表 5…15 用于插入和删除列表项的 CboBox 成员函数
成员函数名 对应的 CListBox 成员函数 与 CEdit 成员函数的不同之处
AddString AddString 无
InsertString InsertString 无
DeleteString DeleteString 无
ResetContent ResetContent 无
Dir Dir 无
表 5…16 用于搜索、查询和设置列表框的 CboBox 成员函数
成员函数名 对应的 CListBox 成员函数 与 CEdit 成员函数的不同之处
GetCount GetCount 无
FindString FindString 无
GetLBText GetText 仅函数名不同
GetLBTextLen GetTextLen 仅函数名不同
GetItemData GetItemData 无
SetItemData SetItemData 无
GetTopIndex GetTopIndex 无
SetTopIndex SetTopIndex 无
表 5…17 与列表项的选择有关的 CboBox 成员函数
成员函数名 对应的 CListBox 成员函数 与 CEdit 成员函数的不同之处
GetCurSel GetCurSel 无
新选的列表项的内容会被拷贝到
SetCurSel SetCurSel
编辑框组件中
新选的列表项的内容会被拷贝到
SelectString SelectString
编辑框组件中
5。7 图片(Picture )控件
图片(Picture )控件实际上是一种静态文本(CStatic )控件,可以通过在创建静态文本
控件时加入特定的标志来得到图片控件,这些方面的内容,具体可以参见 5。1 节。这里主要
介绍一下如何在资源编辑器中快捷方便地使用图片控件。
选中图片控件后拖放到对话框上,可以通过图片控件属性对话框来对图片控件进行基本
·125 ·
…………………………………………………………Page 135……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
设置,图片对话框如图 5…5 所示。
图 5…5 Picture Properties 对话框
图片控件所支持的格式如表 5…18 所示。
表 5…18 Picture 控件支持的格式
格式 含义
Frame 显示一个无填充的矩形框,边框颜色可以通过 Color 下拉列表设定
Rectangle 显示一个填充的矩形框,矩形颜色可通过 Color 下拉列表设定
Icon 显示一个图标(Icon ),图标通过 Image 下拉列表来设置图标资源 ID
Bitmap 显示一个位图(Bitmap ),位图通过 Image 下拉列表来设置位图资源 ID
Enhanced Metafile 显示一个加强的元数据文件(Metafile )
由于图片控件在具体使用方法上和静态文本控件没有什么差别,因此在这里就不详细叙
述了。
实例 5…3:美化对话框应用程序实例。源代码在光盘中“05实例 5…3New_RMB ”目录下。
下面为数字转换一例中的截面定制漂亮的界面和按钮,通过此例程读者将学习到如何美
化对话框应用程序的界面。
定制“外衣”的主要代码是使用 WM_ERASEBKGND 、WM_CTLCOLOR 消息重画用户
界面,利用 CBitmapButton 实现位图按钮,主要代码如下:
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_EDIT:
{
if (pWnd…》GetDlgCtrlID() == IDC_EDIT_NUM)
{
pDC…》SetBkMode(TRANSPARENT);
pDC…》SetTextColor(RGB(200;10;200)); //改变字体的颜色
hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));
}
else if(pWnd…》GetDlgCtrlID() == IDC_EDIT_CHA)
{
·126 ·
…………………………………………………………Page 136……………………………………………………………
第 5 章 常用控件
pDC…》SetBkMode(TRANSPARENT);
pDC…》SetTextColor(RGB(200;10;200)); //改变字体的颜色
hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));
}
else
{
hbr = CDialog::OnCtlColor(pDC; pWnd; nCtlColor);
}
break;
}
case CTLCOLOR_STATIC:
{
if(pWnd…》GetDlgCtrlID() == IDC_SMALL_STATIC)
{
pDC…》SetBkMode(TRANSPARENT);
pDC…》SetTextColor(RGB(10;10;255));
hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
}
else if(pWnd…》GetDlgCtrlID() == IDC_LARGE_STATIC)
{
pDC…》SetBkMode(TRANSPARENT);
pDC…》SetTextColor(RGB(255;10;10));
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;
}
BOOL CRMBDlg::OnEraseBkgnd(CDC* pDC)
{
CBitmap bmp;
bmp。LoadBitmap(IDB_BG);
·127 ·
…………………………………………………………Page 137……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
CBrush brush(&bmp);
CRect rc;
GetClientRect(&rc);
pDC…》FillRect(rc; &brush);
return true;
}
程序运行界面如图 5…6 所示。
图 5…6 定制外衣后对话框的用户界面
5。8 列表(List Ctrl )控件
5。8。1 Win32 新型控件概述
列表控件是一种 Win32 控件,这和前面提到的传统控件在某些方面存在不同。Win32 控
件采用新的 WM_NOTIFY 消息来实现新控件的消息通知机制。在该消息的 wParam 中含有控
件的 ID,lParam 中则有一个指针,这个指针指向一个结构。这个结构要么是 NMHDR 结构,
要么是一个以 NMHDR 结构作为第一个成员的扩充结构。通过 NMHDR 结构及其扩充结构可
以传递附加数据。从理论上讲,可以通过扩充结构传送任意多的数据。需要指出的是,由于
NMHDR 结构是扩充结构的第一个成员,因此 lParam 中的指针即可以认为是指向 NMHDR
结构的,也可以认为是指向包含 NMHDR 结构的扩充结构的。
1.NMHDR 结构
NMHDR 结构如下:
typedef struct tagNMHDR