从本节开始讲解各种常用控件的用法。MFC中常用控件主要包括:静态文本框、编辑框、单选按钮、复选框、分组框、列表框、组合框、图片控件、列表控件、树形控件和进度条控件等等。本节先来讲解静态文本框的使用。
控件的通知消息
在将静态文本框的使用之前,先大概讲讲控件的通知消息。
当控件有事件发生时,它会向父窗口发送通知消息。最常发生的事件就是鼠标单击了,此时控件会向父窗口发送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中说明,还可以为其设置“静态文本控件格式”中风格的任意组合。下面大概为大家说明几个风格:
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 | 获取由SetEnhMetaFile设置的增强图元文件的句柄 |
GetIcon | 获取由SetIcon设置的图标的句柄 |
SetBitmap | 设置要在静态控件中显示的位图 |
SetCursor | 设置要在静态控件中显示的光标图片 |
SetEnhMetaFile | 设置要在静态控件中显示的增强图元文件 |
SetIcon | 设置要在静态控件中显示的图标 |
除了上述成员函数外,由于CStatic是CWnd的派生类,CWnd的很多成员函数也可以使用,例如,GetWindowText、GetWindowRect、SetWindowText等。
静态文本框的基本应用方法在前面已经讲过,本教程就不再举例,大家可以根据本节所讲进行试验,以对静态文本框有更多的认识。欢迎大家来本博客留言进行交流学习。