友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第21部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 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
{
HWND hwndFrom; //控件窗口的句柄
UINT idFrom; //控件的 ID
UINT code; //控件的通知消息码
}NMHDR;
一个典型的扩充结构如下,该结构用于列表视图控件的 LVN_KEYDOWN 通知消息。
typedef struct tagLV_KEYDOWN{
NMHDR hdr; //NMHDR 结构作为第一个成员
·128 ·
…………………………………………………………Page 138……………………………………………………………
第 5 章 常用控件
WORD wVKey;
UINT flags;
}LV_KEYDOWN;
2 .WM_NOTIFY 消息处理
WM_NOTIFY 的消息映射由宏 ON_NOTIFY 负责,该消息映射宏具有如下形式:
ON_NOTIFY(wNotifyCode;id;memberFxn)
参数 wNotifyCode 说明了通知消息码,参数 id 是控件的 ID,第三个参数则是消息处理
函数名。消息处理函数应该按下面的形式声明,其中参数 pNotifyStruct 指向 NMHDR 及其扩
充结构,参数 result 指向一个处理结果:
afx_msg void memberFxn(NMHDR* pNotifyStruct; LRESULT * result);
利用 ClassWizard 可以很方便地加入 WM_NOTIFY 消息映射及其处理函数,一个典型的
WM_NOTIFY 消息映射如下,其中 LVN_KEYDOWN 是 IDC_LIST1 列表视图控件发出的通
知消息:
ON_NOTIFY(LVN_KEYDOWN; IDC_LIST1;OnKeydownList1)
消息处理函数 OnKeydownList1 的定义如下:
void CMyDlg::OnKeydownList1(NMHDR* pNMHDR; LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler
// code here
*pResult = 0;
}
在函数中 ClassWizard 自动把 pNHHDR 指针强制转换成 LV_KEYDOWN 型并赋给
pLVKeyDow 指针,这样,在函数中可通过这两个指针访问 LV_KEYDOWN 扩充结构及其所
含的 NMHDR 结构。另外,在函数返回时,ClassWizard 自动将处理结果赋 0 值。
可以利用 ON_NOTIFY_RANGE 宏把多个 ID 连续的控件发出的相同消息映射到同一个
处理函数上,具体形式如下:
ON_NOTIFY_RANGE(wNotifyCode; id; idLast; memberFxn)
其中参数 id 和 idLast 分别说明明了一组连续的控件 ID 中的头一个和最后一个 ID 。
相应的消息处理函数应按下面的形式声明:
afx_msg void memberFxn(UINT id; NMHDR* pNotifyStruct;LRESULT * result);
与普通的 WM_NOTIFY 消息处理函数相比,该函数多了一个参数 id 用来说明发送通知
消息的控件 ID 。
ClassWizard 不支持 ON_NOTIFY_RANGE 宏,所以需要手工建立消息映射和消息处理函
数。
5。8。2 列表控件的使用
列表控件用来成列地显示数据。列表视图的表项通常包括图标(Icon )和标题(Label )
·129 ·
…………………………………………………………Page 139……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
两部分,它们分别提供了对数据的形象和抽象描述。列表视图控件是对传统的列表框的重大
改进,它能够以下列 4 种格式显示数据。读者可以在资源管理器中的视图(View)菜单中切换
列表视图的显示格式,来看看 4 种格式的不同之处。
o 大图标格式(Large Icons ):可逐行显示多列表项,图标的大小可由应用程序指定,通
常是 32 ×32 像素,在图标的下面显示标题。
o 小图标格式(Small Icons):可逐行显示多列表项,图标的大小可由应用程序指定,通
常是 16×16 像素,在图标的右面显示标题。表项以行的方式组织。
o 列表格式(List )。与小图标格式类似。不同之处在于表项是逐列多列显示的。
o 报告格式(Report 或 Details ):每行仅显示一个表项,在标题的左边显示一个图标,
表项可以不显示图标而只显示标题。表项的右边可以附加若干列子项(Subitem),子
项只显示正文。在控件的顶端还可以显示一个列表头用来说明各列的类型。列表视图
的报告格式很适合显示报表(如数据库报表)。
典型的列表控件的格式如图 5…7 所示。
图 5…7 ClistCtrl 控件形式样例
在讨论如何使用列表视图控件以前,先向读者介绍一下与该控件有关的一些数据类型。
1.LV_COLUMN 结构
该结构仅用于报告式列表视图,用来描述表项的某一列。要想向表项中插入新的一列,
需要用到该结构。LV_COLUMN 结构的定义为:
typedef struct _LV_COLUMN{
UINT mask;
//屏蔽位的组合(见下面括号 ),表明哪些成员是有效的
int fmt;
//该列的表头和子项的标题显示格式(LVCF_FMT) 。可以是 LVCFMT_CENTER 、LVCFMT_LEFT
//或 LVCFMT_RIGHT
int cx; // 以像素为单位的列的宽度(LVCF_FMT)
LPTSTR pszText; //指向存放列表头标题正文的缓冲区(LVCF_TEXT)
int cchTextMax; //标题正文缓冲区的长度(LVCF_TEXT)
int iSubItem; //说明该列的索引(LVCF_SUBITEM)
}LV_COLUMN;
·130 ·
…………………………………………………………Page 140……………………………………………………………
第 5 章 常用控件
2 .LV_ITEM 结构
该结构用来描述一个表项或�
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!