上一节讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了。从本节开始将讲解各种常用控件的用法。常用控件主要包括:静态文本框、编辑框、单选按钮、复选框、分组框、列表框、组合框、图片控件、列表控件、树形控件和进度条控件等等。本节先来讲解静态文本框的使用。

  控件的通知消息

  在讲静态文本框的使用之前,先大概讲讲控件的通知消息。

  当控件有事件发生时,它会向父窗口发送通知消息。最常发生的事件就是鼠标单击了,此时控件会向父窗口发送BN_CLICKED消息,实际上也就是给父窗口发送WM_COMMAND消息,在wParam参数中包含有通知消息码(鼠标单击时的通知消息码就是BN_CLICKED)和控件ID,lParam参数中包含了控件的句柄。在MFC消息映射机制概述中讲过,消息就是由三个部分组成:消息值、wParam参数和lParam参数。

  为控件通知消息添加消息映射和消息处理函数的方法,之前不止一遍讲过了。现在再来具体说明下,控件的消息映射宏的格式大致是:

  ON_通知消息码(nID, memberFun)

  nID参数是控件的ID,memberFun参数是消息处理函数名。例如,ON_BN_CLICKED(IDC_BUTTON1, &CDlg::OnBnClickedButton1)。此消息映射宏应添加到BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间。

  消息处理函数声明的语法形式为:

  afx_msg void memberFun();

  静态文本框的使用

  在前面的举例中,大家应该也清楚了静态文本框的一般作用,就是用于显示文字说明。MFC提供了CStatic类,封装了对静态文本框的所有操作。

  如果我们想在程序中动态创建静态文本框,而不是像前面那样直接从Toolbox中拖到对话框模板上,那么就需要使用CStatic类的成员函数Create。Create函数的原型如下:

  virtual BOOL Create(

    LPCTSTR lpszText,

    DWORD dwStyle,

    const RECT& rect,

    CWnd* pParentWnd,

    UINT nID = 0xffff

  );

  参数说明:

  lpszText:指定要在控件中显示的文字。如果为NULL则不会显示任何文字。

  dwStyle:指定静态控件的风格。静态文本框一般都是对话框或其他窗口的子窗口,而且是可见的,所以应该包含WS_CHILD和WS_VISIBLE风格,另外,MSDN中说明,还可以为其设置“static contol styles”中风格的任意组合。下面大概为大家说明几个风格:

  SS_BITMAP:一个位图将显示在静态文本控件中,Create函数的lpszText参数字符串是资源文件中定义的位图名。此风格忽略宽度和高度参数,静态控件自动调整它的尺寸来适应位图。

  SS_BLACKFRAME:指定一个具有与窗口边界同色的框,默认为黑色。

  SS_BLACKRECT:指定一个具有与窗口边界同色的实矩形,默认为黑色。

  SS_CENTER:是显示的正文居中对齐,正文可以换行。

  SS_GRAYFRAME:指定一个具有与屏幕背景同色的边框。

  SS_GRAYRECT:指定一个具有与屏幕背景同色的实矩形。

  SS_ICON:使控件显示一个在资源中定义的图标,图标的名字有Create函数的lpszText参数指定,图标自动调整它的尺寸。

  SS_LEFT:左对齐正文,正文能回绕。

  SS_LEFTNOWORDWRAP:左对齐正文,正文不能回绕。

  SS_NOTIFY:使空间能向父窗口发送鼠标事件消息。

  SS_RIGHT:右对齐正文,可以回绕。

  SS_SIMPLE:使静态正文在运行时不能被改变并使正文显示在单行中。

  SS_WHITEFRAME:指定一个具有与窗口背景同色的框,默认为白色。

  SS_WHITERECT:指定一个具有与窗口背景同色的实心矩形,默认为白色。

  我们在对话框模板添加静态文本框时,可以在静态文本框的属性页中设置他的风格,很多都与上面的风格是对应的,例如,Simple属性就相当于SS_SIMPLE风格。

  rect:指定静态控件的位置和大小,它可以是RECT结构体类型,也可以是CRect类的对象。

  pParentWnd:指定静态控件的父窗口,通常是一个CDialog对象,不能是NULL。

  nID:指定静态控件的ID。

  CStatic类的成员函数简介

  简单介绍下CStatic类的主要成员函数,下面是成员函数列表。

  GetBitmap:获取由SetBitmap函数设置的位图的句柄。

  GetCursor:获取由SetCursor设置的光标的句柄。

  GetEnhMetaFile:获取由SetEnhMetalFile设置的增强图元文件的句柄。

  GetIcon:获取由SetIcon设置的图标的句柄。

  SetBitmap:设置要在静态控件中显示的位图。

  SetCursor:设置要在静态控件中显示的光标图片。

  SetEnhMetaFile:设置要在静态控件中显示的增强图元文件。

  SetIcon:设置要在静态空间中显示的图标。

  除了上述成员函数外,由于CStatic是CWnd的派生类,CWnd的很多成员函数也可以使用,例如,GetWindowText、GetWindowRect、SetWindowText等。

MFC编程入门之二十(常用控件:静态文本框)的更多相关文章

  1. VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)

    前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建.CTreeCtrl类的主要成员函数和应用实例. 树形控件的创建 MFC为树形控件提 ...

  2. VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)

    上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类. 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Con ...

  3. VS2010/MFC编程入门之二十(常用控件:静态文本框)

    上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始鸡啄米将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组 ...

  4. VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

    前面一节中,鸡啄米讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用.      列表视图控件简介 列表视图控件List Control同样比较常见, ...

  5. MFC编程入门之二十八(常用控件:列表视图控件List Control上)

    前面一节中,讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用. 列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符 ...

  6. MFC编程入门之二十五(常用控件:组合框控件ComboBox)

    上一节讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是组合框 ...

  7. MFC编程入门之二十四(常用控件:列表框控件ListBox)

    前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法.本文要讲的是列表框控件(ListBox)及其使用实例. 列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选 ...

  8. MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

    本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的侠义的 ...

  9. 【转】VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

    原文网址:http://www.jizhuomi.com/software/189.html 上一节鸡啄米讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常 ...

随机推荐

  1. 用js计算从开始到结束时间之内的按周值选定

    前台选择周几(周一周日),比如选择<td>周一</td>,<td>周三</td>,<td>周五</td>我用js attr 给t ...

  2. 00Linux学习及角色定义

    一.嵌入式Linux学习顺序 二.Linux架构 三.Linux工程师角色划分 四. 嵌入式应用工程师工作内容与所需知识点 从图 1可以知道, 嵌入式应用工程师主要从事与产品相关的嵌入式 Linux ...

  3. Silverlight动态生成控件实例

    刚学习Silverlight,做了一个动态创建控件的实例 实现结果:根据已有的控件类名称,得到控件的实例化对象 实现思路1:就是定义一个模板文件,将类名做为参数,在silverlight中使用Srea ...

  4. UVa 11235 RMQ

    首先讲一下RMQ算法的意思. RMQ(Range Minimum Query,RMQ)范围最小值,给出一个n个元素的数组,计算min(A[L],A[L+1],...,A[R-1],A[R]): 这里运 ...

  5. 无法打开键: UNKNOWN\Components\BE1FB738077DBE490AF18C3B9B1A1EE8\E5F5286B58B542741A00A0A9AA420B27

    MSI (s) (D8:38) [07:38:20:634]: 产品: Microsoft SQL Server VSS 编写器 -- 错误 1402.无法打开键: UNKNOWN\Component ...

  6. Java反射遍历数组

    日志中有时候需要查看数组中的值,但是重载很多的打印函数,觉得很别扭.所以想通过反射,获取数组中的值,打印出来.Java提供了数组反射操作的类,之前没有关注过,提供的方法简单易用. public sta ...

  7. 被碾压过得Samsung SCH-W319 的取证恢复

    2015年2月笔者接到一台! 被车轧过的手机Samsung SCH-W319,要求恢复 如图,显示屏被轧过,屏弯掉了 电池亦无,目前打不开!如下图: 配好电池后是这个样子,终于可以获得镜像dump 而 ...

  8. QDataStream和QByteArray

    一个写操作可以参考: QDataStream &operator >>(QDataStream &in, SerializedMessage &message) { ...

  9. angular-笔记

    ng-model 指令ng-model 指令 绑定 HTML 元素 到应用程序数据.ng-model 指令也可以:为应用程序数据提供类型验证(number.email.required).为应用程序数 ...

  10. js函数的传参是按值传对递

    根据js高级程序设计第三版编写,对于函数的参数只能按值传递是这样解释的: ECMAScript 中所有函数的参数都是按值传递的.也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另 ...