当前位置:松语文学 > 其他类型 >VC++_6.0程序设计从入门到精通最新章节 > VC++_6.0程序设计从入门到精通TXT下载
错误举报

第 30 章

  成员函数,可用来查询和设置编辑框组件。

  表5-14 针对编辑框组件的CComboBox 成员函数

  成员函数名 对应的CEdit 成员函数 与CEdit 成员函数的不同之处

  CWnd::GetWindowText CWnd::GetWindowText 无

  CWnd::SetWindowText CWnd::SetWindowText 无

  CWnd::GetWindowTextLength CWnd::GetWindowTextLength 无

  GetEditSel GetSel 仅函数名不同

  SetEditSel SetSel 函数名不同,且无bNoScroll 参数

  Clear Clear 无

  枫叶文学网www.fywxw.com

  第5 章 常用控件

  ·125·

  续表

  成员函数名 对应的CEdit 成员函数 与CEdit 成员函数的不同之处

  Copy Copy 无

  Cut Cut 无

  Paste Paste 无

  与CListBox 的成员函数类似,针对列表框组件的CComboBox 成员函数也可以分为3 类。

  表5-15 列出了用于chā入和删除列表项的成员函数,表5-16 列出了用于搜索、查询和设置列

  表框的成员函数,与列表项的选择有关的成员函数如表5-17 所示。需要指出的是,如果这些

  函数出错,则返回CB_ERR,而不是LB_ERR。另外,排序的组合框具有的是CBS_SORT 风

  格,而不是LBS_SORT。

  表5-15 用于chā入和删除列表项的CComboBox 成员函数

  成员函数名 对应的CListBox 成员函数 与CEdit 成员函数的不同之处

  AddString AddString 无

  InsertString InsertString 无

  DeleteString DeleteString 无

  ResetContent ResetContent 无

  Dir Dir 无

  表5-16 用于搜索、查询和设置列表框的CComboBox 成员函数

  成员函数名 对应的CListBox 成员函数 与CEdit 成员函数的不同之处

  GetCount GetCount 无

  FindString FindString 无

  GetLBText GetText 仅函数名不同

  GetLBTextLen GetTextLen 仅函数名不同

  GetItemData GetItemData 无

  SetItemData SetItemData 无

  GetTopIndex GetTopIndex 无

  SetTopIndex SetTopIndex 无

  表5-17 与列表项的选择有关的CComboBox 成员函数

  成员函数名 对应的CListBox 成员函数 与CEdit 成员函数的不同之处

  GetCurSel GetCurSel 无

  SetCurSel SetCurSel

  新选的列表项的内容会被拷贝到

  编辑框组件中

  SelectString SelectString

  新选的列表项的内容会被拷贝到

  编辑框组件中

  5.7 图片(Picture)控件

  图片(Picture)控件实际上是一种静态文本(CStatic)控件,可以通过在创建静态文本

  控件时加入特定的标志来得到图片控件,这些方面的内容,具体可以参见5.1 节。这里主要

  介绍一下如何在资源编辑器中快捷方便地使用图片控件。

  选中图片控件后拖放到对话框上,可以通过图片控件属xìng对话框来对图片控件进行基本

  枫叶文学网www.fywxw.com

  Visual C++ 6.0 程序设计从入门到精通

  ·126·

  设置,图片对话框如图5-5 所示。

  图5-5 Picture Properties 对话框

  图片控件所支持的格式如表5-18 所示。

  表5-18 Picture 控件支持的格式

  格式 含义

  Frcom 显示一个无填充的矩形框,边框颜色可以通过Color 下拉列表设定

  Rectangle 显示一个填充的矩形框,矩形颜色可通过Color 下拉列表设定

  Icon 显示一个图标(Icon),图标通过Image 下拉列表来设置图标资源ID

  Bitmap 显示一个位图(Bitmap),位图通过Image 下拉列表来设置位图资源ID

  Enhanced Metafile 显示一个加强的元数据文件(Metafile)

  由于图片控件在具体使用方法上和静态文本控件没有什么差别,因此在这里就不详细叙

  述了。

  实例5-3:美化对话框应用程序实例。源代码在光盘中“\05\实例5-3\New_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)

  {

  枫叶文学网www.fywxw.com

  第5 章 常用控件

  ·127·

  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);

  枫叶文学网www.fywxw.com

  Visual C++ 6.0 程序设计从入门到精通

  ·128·

  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 结构作为第一个成员

  枫叶文学网www.fywxw.com

  第5 章 常用控件

  ·129·

  WORD wVKey;

  UINT flags;

  }LV_KEYDOWN;

  2.WM_NOTIFY 消息处理

  WM_NOTIFY 的消息映shè由宏ON_NOTIFY 负责,该消息映shè宏具有如下形式:

  ON_NOTIFY(wNotifyCode,idcommberFxn)

  参数wNotifyCode 说明了通知消息码,参数id 是控件的ID,第三个参数则是消息处理

  函数名。消息处理函数应该按下面的形式声明,其中参数pNotifyStruct 指向NMHDR 及其扩

  充结构,参数result 指向一个处理结果:

  afx_msg voidcommberFxn(NMHDR* pNotifyStruct, LRESULT * result);

  利用ClassWizard 可以很方便地加入WM_NOTIFY 消息映shè及其处理函数,一个典型的

  WM_NOTIFY 消息映shè如下,其中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 连续的控件发出的相同消息映shè到同一个

  处理函数上,具体形式如下:

  ON_NOTIFY_RANGE(wNotifyCode, id, idLast,commberFxn)

  其中参数id 和idLast 分别说明明了一组连续的控件ID 中的头一个和最后一个ID。

  相应的消息处理函数应按下面的形式声明:

  afx_msg voidcommberFxn(UINT id, NMHDR* pNotifyStruct,LRESULT * result);

  与普通的WM_NOTIFY 消息处理函数相比,该函数多了一个参数id 用来说明发送通知

  消息的控件ID。

  ClassWizard 不支持ON_NOTIFY_RANGE 宏,所以需要手工建立消息映shè和消息处理函

  数。

  5.8.2 列表控件的使用

  列表控件用来成列地显示数据。列表视图的表项通常包括图标(Icon)和标题(Label)

  枫叶文学网www.fywxw.com

  Visual C++ 6.0 程序设计从入门到精通

  ·130·

  两部分,它们分别提供了对数据的形象和抽象描述。列表视图控件是对传统的列表框的重大

  改进,它能够以下列4 种格式显示数据。读者可以在资源管理器中的视图(View)菜单中切换

  列表视图的显示格式,来看看4 种格式的不同之处。

  ? 大图标格式(Large Icons):可逐行显示多列表项,图标的大小可由应用程序指定,通

  常是32×32 像素,在图标的下面显示标题。

  ? 小图标格式(Small Icons):可逐行显示多列表项,图标的大小可由应用程序指定,通

  常是16×16 像素,在图标的右面显示标题。表项以行的方式组织。

  ? 列表格式(List)。与小图标格式类似。不同之处在于表项是逐列多列显示的。

  ? 报告格式(Report 或Details):每行仅显示一个表项,在标题的左边显示一个图标,

  表项可以不显示图标而只显示标题。表项的右边可以附加若干列子项(Subitem),子

  项只显示正文。在控件

  松语文学免费小说阅读_www.16sy.com