文章目录
一、CStatic是什么?
CStatic MFC中静态控件,包含文本,矩形,图像
二、使用步骤
1.创建静态控件
代码如下(示例):
···
//在类体中声明 CFont,CStatic
protected:
HICON m_hIcon;
CFont font;
CStatic m_wndstatic;
···
//创建CStatic m_wndstatic
CRect rect;//定义static位置
m_wndstatic.Create(_T(" "), WS_CHILD | SS_LEFT | WS_VISIBLE, rect, this, IDC_STATIC1);
2.静态控件设置字体
注意,静态矩形控件不会显示文字,即使Create指定了非零文本字符串
代码如下(示例):
//创建字体
font.CreateFont(-16, 0, 0, 0, FW_NORMAL, 0, 0, 0,
DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
_T("黑体"));
//设置字体
m_wndstatic.SetFont(&font, FALSE);
//设置显示文字
m_wndstatic.SetWindowTextW(L"你好");
3.静态控件画矩形
注意,静态矩形控件不会显示文字,即使Create指定了非零文本字符串
代码如下(示例):
//注意,静态矩形控件不会显示文字,即使Create指定了非零文本字符串
m_wndstatic.Create(_T(" "), WS_CHILD | SS_LEFT | WS_VISIBLE|[SS_BLACkFRAME], rect, this, IDC_STATIC1);
- 可选样式
- 样式如图
样式 | 图片 | 备注 |
---|---|---|
SS_BLACKFRAME | 黑色画空心矩形 | |
SS_BLACKRECT | 黑色画实体矩形 | |
SS_ETCHEDFRAME | 蚀刻框空心矩形 | |
SS_ETCHEDHORZ | 水平蚀刻线 | |
SS_ETCHEDHVERT | 垂直蚀刻线 | |
SS_GRAYFRAME | 灰色画空心矩形 | |
SS_GRAYRECT | 灰色画空心矩形 | |
SS_WHITEFRAME | 白色画空心矩形 | |
SS_WHITERECT | 白色画实心矩形 |
4.静态控件显示Icon或 Bitmap或metaFile
- 样式定义如下表
代码如下(示例): - 图标icon
- 位图Bitmap
//类体定义m_hIcon,m_Bitmap
...
protected:
HICON m_hIcon;
CBitmap m_Bitmap;
CFont font;
public:
CStatic m_wndstatic;
CStatic m_wndstatic2;//设置图标
CStatic m_wndstatic3;//设置位图
...
//加载m_hIcon,m_Bitmap
...
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_Bitmap.LoadBitmapW(IDB_BITMAP1);
...
//设置文字以及字体
CRect rect1(120, 180, 180, 210);
m_wndstatic.Create(_T(" "), WS_CHILD | SS_LEFT | WS_VISIBLE, rect1, this, IDC_STATIC1);
font.CreateFont(-16, 0, 0, 0, FW_NORMAL, 0, 0, 0,
DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
_T("黑体"));
//CStatic *ps = (CStatic *)GetDlgItem(IDC_STATIC1);
m_wndstatic.SetFont(&font, FALSE);
m_wndstatic.SetWindowTextW(L"你好");
//设置ICON
CRect rect2=CRect(280, 180, 328, 228);
m_wndstatic2.Create(L"icon", WS_CHILD | WS_VISIBLE | SS_ICON |WS_BORDER, rect2, this, IDC_STATIC);
//hIcon = ::LoadIcon(AfxGetInstanceHandle(), _T("Static.ico"));
m_wndstatic2.SetIcon(m_hIcon);
//设置BitMap
CRect rect3 = CRect(380, 180, 428, 228);
m_wndstatic3.Create(L"bitmap", WS_CHILD | WS_VISIBLE | SS_BITMAP | WS_BORDER, rect3, this, IDC_STATIC);
//hIcon = ::LoadIcon(AfxGetInstanceHandle(), _T("Static.ico"));
m_wndstatic3.SetBitmap(m_Bitmap);
效果如下:
5.静态控件消息
// in MessageMap
...
BEGIN_MESSAGE_MAP(CStaticDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_STN_CLICKED(IDC_STATIC, OnClicked)
END_MESSAGE_MAP()
...
//In OnCreate
...
CRect rect3 = CRect(380, 180, 428, 228);
m_wndstatic3.Create(L"bitmap", WS_CHILD | WS_VISIBLE | SS_BITMAP |SS_SUNKEN| WS_BORDER|SS_NOTIFY | WS_TABSTOP, rect3, this, IDC_STATIC);
//hIcon = ::LoadIcon(AfxGetInstanceHandle(), _T("Static.ico"));
m_wndstatic3.SetBitmap(m_Bitmap);
...
//in onClicked
void CStaticDlg::OnClicked()
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
效果如图:
总结
CStatic类 总结:
-
静态控件有三种类型:文本.矩形 和 图像。静态文本经常用来标记其他控件。
-
静态控件的第2个用途是画矩形。静态样式指定了所画矩形的类型。创建矩形后调用Create术指定了非零文本字符串,静态矩形控件也 不会显示文本。
-
默认时,静态控件不给其父窗口发送通知。但是用 SS_NOTIFY 样式创建的静态控件可以发送表7-8中给出的4种类型通知。