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

第 24 章

  话框的使用,并根据对话框的

  各种不同类型进行分类介绍。本章需要掌握的内容有:

  ? 一般对话框的创建和使用方法,包括模态和非模态对话框。

  ? 属xìng页对话框的创建和使用。

  ? 通用对话框的使用。

  ? 消息对话框的使用。

  对话框在任何一个程序中都会大量使用,设计功能丰富完善、界面合理美观的对话框是

  设计用户界面的重点和难点,需要认真学习、理解和掌握。

  枫叶文学网www.fywxw.com

  第5 章 常用控件

  在与用户的jiāo互过程中,控件(Control)担任着重要的角色。MFC 提供了大量的控件类,

  它们封装了控件的功能,通过这些控件类,可以方便地创建控件,对控件进行查询和控制。

  控件可粗分为两类,一类是在Windows 3.x 中就已支持的传统控件,另一类是Windows

  95/NT/2000 中支持的新型Win32 控件,所有的控件类都是CWnd 类的直接或间接派生类。不

  过对于新型Win32 控件,应用程序只能创建控件对象而不能创建数据变量。不管是什么类型

  的控件,一般都具有WS_CHILD 和WS_VISIBLE 窗口风格,其中WS_CHILD 指定窗口为子

  窗口,WS_VISIBLE 使窗口是可见的。另外,大部分控件还具有WS_TABSTOP 风格,

  WS_TABSTOP 使控件具有Tabstop 属xìng。MFC 类库提供的主要控件如表5-1 所示。

  表5-1 常用控件列表

  控件 功能 对应控件类

  静态文本(Static Text) 显示正文,一般不能接受输入信息 CStatic

  图片(Picture)

  显式位图、图标、方框和图元文件,一般不能接

  受输入信息

  CStatic

  文本编辑框(Edit Box) 输入并编辑正文,支持单行和多行编辑 CEdit

  命令按钮(Button) 响应用户的输入,触发相应的事件 CButton

  检查框(Check Box)

  用作选择标记,可以有选中、不选中和不确定3

  种状态

  CButton

  单选按钮(Radio Button) 用来从两个或多个选项中选中一项 CButton

  组框(Group Box)

  显示正文和方框,主要用来将相关的一些控件聚

  成一组

  CButton

  列表框(List Box)

  显示一个列表,用户可以从该列表中选择一项或

  多项

  CListBox

  组合框(Combo Box)

  是一个编辑框和一个列表框的组合,分为简易式、

  下拉式和下拉列表式

  CComboBox

  滚动条(Scroll Bar)

  主要用来从一个预定义范围值中迅速而有效地选

  取一个整数值

  CScrollBar

  列表控件(ListCtrl) 主要用来显示列表型报表,提供多种显示模式 CListCtrl

  树型控件(TreeCtrl) 主要用来显示树状结构数据 CTreeCtrl

  选项卡控件(TabCtrl) 主要用来显示多种重叠的相关对话框界面 CTabCtrl

  5.1 静态文本(Static text)控件

  静态文本控件是传统控件的一种,传统控件主要包括文本控件、命令按钮、选择框、单

  选按钮、编辑框、列表框和组合框等,如图5-1 所示。

  枫叶文学网www.fywxw.com

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

  ·100·

  图5-1 主要传统控件样式

  5.1.1 传统控件通知消息

  在介绍静态文本控件的用法之前,先讲述传统控件的控件通知消息。控件通过向父窗口

  发送控件通知消息来表明发生了某种事件。例如,在按钮上单击鼠标时,按钮控件会向父窗

  口发送BN_CLICKED 消息。传统控件的通知消息实际上是通过WM_COMMAND 消息发给

  父窗口的(滚动条除外),在该消息的wParam 中含有通知消息码(如BN_CLICKED)和控

  件的ID,在lParam 中则包含了控件的句柄。

  利用ClassWizard 可以很容易地为控件通知消息加入消息映shè和消息处理函数,这在上

  一章中的对话框应用程序中已经讲解过了。传统控件的消息映shè宏是ON_XXXX,其中XXXX

  表示通知消息码,如BN_CLICKED。ON_XXXX 消息映shè宏格式如下,该宏有两个参数,

  一个是控件的ID,一个是消息处理函数名:

  ON_XXXX(nIDcommberFxn)

  消息处理函数的声明形式如下:

  afx_msg voidcommberFxn();

  有时,为了处理方便,需要把多个ID 连续的控件发出的相同消息映shè到同一个处理函

  数上,这时就要用到ON_CONTROL_RANGE 宏。例如,要处理一组单选按钮发出的

  BN_CLICKED 消息,相应的消息映shè如下:

  ON_CONTROL_RANGE(BN_CLICKED,IDC_FIRST,IDC_LAST,OnRadioClicked)

  ON_CONTROL_RANGE 消息映shè宏的第一个参数是控件消息码,第二和第三个参数分

  别指明了一组连续的控件ID 中的头一个和最后一个ID,最后一个参数是消息处理函数名。

  函数OnRadioClicked 的声明如下,该函数比上面的OnAddcommberFxn 多了一个参数nID

  以说明发送通知消息的控件ID。

  afx_msg void OnRadioClicked(UINT nID);

  组框

  编辑框

  复选框

  静态文本

  列表框

  组合框

  单选按钮

  普通按钮

  枫叶文学网www.fywxw.com

  第5 章 常用控件

  ·101·

  另外需要注意的是:ClassWizard 不支持ON_CONTROL_RANGE 宏,所以需要手工建立

  消息映shè和消息处理函数。

  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 指定一个具有与屏幕背景同色的实矩形

  SS_ICON

  使控件显示一个在资源中定义的图标,图标的名字有Create 函数的

  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。对于用对

  话框模板编辑器创建的静态控件,可以在控件的属xìng对话框中指定控件风格。例如,可以在

  静态正文控件的属xìng对话框中选择Simple,这相当于指定了SS_SIMPLE 风格,这在一定程

  度上方便了控件的生成。

  5.1.3 Cstatic 类的主要成员函数

  CStatic 类主要的成员函数如表5-3 所示,同时也可以利用CWnd 类的成员函数

  GetWindowText、SetWindowText 和GetWindowTextLength 来查询和设置静态控件中显示的文

  本信息。

  枫叶文学网www.fywxw.com

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

  ·102·

  表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 用于控制对话框中控件的颜色,可以有选择xìng地设置静态

  文本框控件的背景和颜色,如下面的代码段用于更改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;

  枫叶文学网www.fywxw.com

  第5 章 常用控件

  ·103·

  }

  5.2 文本编辑(Edit Box)控件

  5.2.1 文本编辑控件的使用

  文本编辑(Edit Box)控件是一种传统控件,实际上是一个简易的正文编辑器,用户可

  以在编辑框中输入并编辑正文。

  文本编辑框既可以是单行的,也可以是多行的,多行编辑框的编号是从零开始编排的。

  在一个多行编辑框中,除了最后一行外,每一行的结尾处都有一对回车换行符(用“\r\n”表

  示),这对回车换行符是正文换行的标志,在屏幕上是不可见的。

  文本编辑控件会向父窗口发出如表5-4 所示的控件通

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