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,否则将得不到正常的运行结果。