MFC类CStatic封装了标准的Windows静态控件
(1)静态控件一般用来显示静态的文本、图标、方框、矩形、位图或增强图元文件(SS_ENHMETAFILE),它不能用来接受用户的输入,也很少用来显示输出,而在更多的情况下用作那些没有固定的标题文本属性的控件(如文本编辑控件、列表框等)的标签,或者用来进行控件的分组,或者用来显示一些提示性文本
(2)可以通过静态控件的Properties属性对话框的Styles选项卡进行这些属性或样式的设置:
Align text:决定静态文本控件中文本的横向对齐方式。可供选择的值为Left (向左对齐)、Center (居中对齐)和Right (向右对齐)。默认值:Left
Center Vertically:在静态文本控件中将文本进行垂直居中。类型:布尔值 默认值:假
No prefix:不将控件文本中的“&”符解释为助记字符。在默认情况下,“&”符号在显示时会被去掉,取而代之的是紧接“&”符之后的字符被以加下划线的格式进行显示。
我们早在前面说过,通过双写“&”符可以在控件文本中显示出实际的“&”符,但是,对于一些特殊的场合,如使用静态文本控件来显示文件名的时候,将No prefix属性设置为“真”要更方便。
No wrap:以左对齐的方式来显示文本,并且不进行文本的自动回行。超出控件右边界的文本将被裁去。
需要注意的是,这时即使使用转义字符序列”\n”也不可以强制控件文本进行换行。类型:布尔值 默认值:假
Simple:禁止设置Text Align属性和No Wrap样式。在该属性为真的情况下,静态文本控件中的文本不会被自动回行,也不会被剪裁。类型:布尔值 默认值:假
Notify:决定控件在被单击时是否通知父窗口。类型:布尔值 默认值:假
Sunken:使用静态文本控件看上去有下凹的感觉。类型:布尔值 默认值:假
(3)CStatic *cs = new CStatic();
cs->Create("hello world", WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(50,80, 150, 150), pParentWnd);//可见的、WS_DISABLED拒绝接受用户事件(控件变为灰色)
注:以上Create函数有一个默认缺省的参数用来指定静态控件的控件标识,缺省为 0xffff
这两行代码是典型的,调用new来为CStatic类的事例分配内存,然后调用类的构造函数。构造函数是用来完成类所需要的初始化功能的。
Create函数建立控制并把它放到屏幕上,其位置是相对于其父窗口的用户区域而言的
另外:如果有定义static控件资源,那么可以通过CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATICID);来获取一个static控件
(4)同样Static控件也是一种窗口类型,可以从上面的创建函数看出,另外也有自己的控件属性:
SS_BLACKFRAME该控件区域以矩形边界显示。颜色与窗口框架相同
SS_BLACKRECT该控件以填充的矩形显示。颜色与当前的窗口框架相同
SS_CENTER文本居中
SS_GRAYFRAME控件以矩形边框方式显示。颜色与当前桌面相同
SS_GRAYRECT控件以填充的矩形显示。颜色与当前的桌面相同
SS_ICON控件以图标形式显示。文本作为图标在资源文件的名称。rect参数只控制位置
SS_LEFT文本居左显示。文字可回绕
SS_LEFTNOWORDWRAP文本居左显示。多余的文字被剪裁(用来关闭文本回绕的。它会强迫使用左对齐属性)
SS_NOPREFIX表示字符串中的"&"字符不表示为加速前缀
SS_RIGHT文本居右显示。文字可回绕
SS_SIMPLE只简单的显示一行文本。任何CTLCOLOR信息都被其父窗口忽略
SS_USERITEM用户定义项
SS_WHITEFRAME控制以矩形边框方式显示。颜色与当前窗口背景颜色相同
SS_WHITERECT控制以填充矩形方式显示。颜色与当前窗口背景颜色相同
(5)我们在(1)中强调static控件的用途,现在可以利用ModifyStyle来改变static控件类型来进行不同的显示
先来看看ModifyStyle:修改窗口的风格(有一些属性改不了)
BOOL ModifyStyle
(
DWORD dwRemove,// 指定修改时要删除的窗风格
DWORD dwAdd,// 指定修改时将要增加的窗口风格
UINT nFlags=0// 该参数将被传给SetWindowPos
);
如果该函数成功调用返回一个非0值,否则返回0
如果nFlags不为0, ModifyStyle将调用Windows API 函数SetWindowPos并且结合nFlags和以下四个预先布置好的标志重画该窗口。
SWP_NOSIZE 保持当前大小。
SWP_NOMOVE 保持当前位置.。
SWP_NOZORDER 保持当前的Z次序。
SWP_NOACTIVATE 不激活该窗口
风格参数说明:
ES开头的是editbox ES(EDIT STYLE缩写,其他类似)
BS开头的是button
LVS开头的是listview
SS(Static Style)
WS(Window Style)开头的常数表示可适用于所有窗口,它们定义在CWnd对象中
ModifyStyle(WS_CAPTION,0,0);//去除标题栏
ModifyStyle(0,WS_THICKFRAME,0);//添加 WS_THICKFRAME风格
(6)用法:
//加载图标
HICON hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//设置静态控件的样式以使得可以使用图标,并使图标显示时居中
pStatic->ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE);
//设置静态控件图标
pStatic->SetIcon(hIcon);
//获得位图句柄
HBITMAP hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_STATICID));
//设置静态控件的样式以使得可以使用位图,并使位图在显示时居中
pStatic->ModifyStyle(0xF, SS_BITMAP|SS_CENTERIMAGE);
//设置静态控件显示时使用的位图
pStatic->SetBitmap(hBitmap);
注意:在使用位图的例子中,传递给值绝ModifyStyle的第一个参数绝对不可以为0,否则将得不到正常的运行结果。