CStatic
类
提供 Windows 静态控件功能。
语法
class CStatic : public CWnd
成员
公共构造函数
名称 | 描述 |
---|---|
CStatic::CStatic |
构造 CStatic 对象。 |
公共方法
名称 | 描述 |
---|---|
CStatic::Create |
创建 Windows 静态控件并将其附加到 CStatic 对象。 |
CStatic::DrawItem |
通过替代的方式绘制所有者绘制的静态控件。 |
CStatic::GetBitmap |
检索先前使用 SetBitmap 设置的位图句柄。 |
CStatic::GetCursor |
检索先前使用 SetCursor 设置的光标图像的句柄。 |
CStatic::GetEnhMetaFile |
检索先前使用 SetEnhMetaFile 设置的增强型元文件的句柄。 |
CStatic::GetIcon |
检索先前使用 SetIcon 设置的图标句柄。 |
CStatic::SetBitmap |
指定要在静态控件中显示的位图。 |
CStatic::SetCursor |
指定要在静态控件中显示的光标图像。 |
CStatic::SetEnhMetaFile |
指定要在静态控件中显示的增强型元文件。 |
CStatic::SetIcon |
指定要在静态控件中显示的图标。 |
备注
静态控件显示文本字符串、框、矩形、图标、光标、位图或增强型元文件。 它可用于标记、封装或分隔其他控件。 静态控件通常不接受输入,也不提供输出;不过,如果控件是用 SS_NOTIFY
样式创建的,它可以通知其父鼠标单击。
分两步创建静态控件。 首先调用构造函数以构造 CStatic
对象,然后调用 Create
成员函数创建静态控件,并将其附加到 CStatic
对象。
如果在对话框中创建 CStatic
对象(通过对话框资源),则在用户关闭对话框时会自动销毁 CStatic
对象。
如果在窗口中创建 CStatic
对象,可能还需要销毁该对象。 在窗口内的堆栈上创建的 CStatic
对象会自动销毁。 如果使用 new
函数在堆上创建 CStatic
对象,则必须在对象上调用 delete
以在完成后将其销毁。
继承层次结构
CStatic
要求
标头:afxwin.h
CStatic::Create
创建 Windows 静态控件并将其附加到 CStatic
对象。
virtual BOOL Create(
LPCTSTR lpszText,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID = 0xffff);
参数
lpszText
指定要放置在控件中的文本。 如果为 NULL
,则不显示任何文本。
dwStyle
指定静态控件的窗口样式。 将静态控件样式的任意组合应用于控件。
rect
指定静态控件的位置和大小。 它可以是 RECT
结构或 CRect
对象。
pParentWnd
指定 CStatic
父窗口,通常是 CDialog
对象。 不得为 NULL
。
nID
指定静态控件的控件 ID。
返回值
如果成功,则不为 0;否则为 0。
备注
分两步构造 CStatic
对象。 首先,调用构造函数 CStatic
,然后调用 Create
,这将创建 Windows 静态控件并将其附加到 CStatic
对象。
将以下窗口样式应用于静态控件:
WS_CHILD
:始终WS_VISIBLE
:通常WS_DISABLED
很少
如果要在静态控件中显示位图、光标、图标或元文件,则需要应用以下静态样式之一:
SS_BITMAP
将此样式用于位图。SS_ICON
将此样式用于光标和图标。SS_ENHMETAFILE
将此样式用于增强型元文件。
对于光标、位图或图标,可能还需要使用以下样式:
SS_CENTERIMAGE
用于在静态控件中居中图像。
示例
// This code can be placed in OnInitDialog
CStatic myStatic;
// Create a child static control that centers its text horizontally.
myStatic.Create(_T("my static"), WS_CHILD | WS_VISIBLE | SS_CENTER,
CRect(10, 10, 150, 50), pParentWnd);
CStatic::CStatic
构造 CStatic
对象。
CStatic();
示例
// Create a static object on the stack.
CStatic myStatic;
// Create a static object on the heap.
CStatic *pmyStatic = new CStatic;
CStatic::DrawItem
由框架调用以绘制所有者绘制的静态控件。
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
参数
lpDrawItemStruct
指向 DRAWITEMSTRUCT
结构的指针。 结构包含有关要绘制的项以及所需绘制类型的信息。
备注
替代此函数以实现绘制所有者绘制的 CStatic
对象(控件具有 SS_OWNERDRAW
样式)。
CStatic::GetBitmap
获取与 CStatic
关联的位图句柄,该句柄之前使用 SetBitmap
进行设置。
HBITMAP GetBitmap() const;
返回值
当前位图的句柄,或 NULL
(如果未设置位图)。
示例
// Code such as this could be placed in the OnInitDialog callback.
// It creates two bitmap static controls on the heap, using members
// _m_pCStatic_A and _m_pCStatic_B to identify them so that they can
// be destroyed when no longer needed.
CBitmap CBmp;
CImage CImg;
// Create a child bitmap static control and load it from a CBitmap object.
_m_pCStatic_A = new CStatic;
_m_pCStatic_A->Create(_T("A bitmap static control (A)"),
WS_CHILD|WS_BORDER|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(16,16,64,64),
pParentWnd);
CBmp.LoadOEMBitmap(OBM_CLOSE); // Loads one of the default Windows bitmaps
_m_pCStatic_A->SetBitmap( HBITMAP(CBmp) );
_m_pCStatic_A->ShowWindow( SW_SHOW );
// Create a child bitmap static control and load it from a CImage object.
_m_pCStatic_B = new CStatic;
_m_pCStatic_B->Create(_T("A bitmap static control (B)"),
WS_CHILD|WS_BORDER|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(90,16,138,64),
pParentWnd);
CImg.Load( _T("test.png") );
if( _m_pCStatic_B->GetBitmap( ) == NULL )
_m_pCStatic_B->SetBitmap( HBITMAP(CImg) );
/* Then, later:
delete( _m_pCStatic_A );
delete( _m_pCStatic_B );
*/
CStatic::GetCursor
获取与 CStatic
关联的光标句柄,该句柄之前使用 SetCursor
进行设置。
HCURSOR GetCursor();
返回值
当前光标的句柄,或 NULL
(如果未设置光标)。
示例
CStatic myStatic;
// Create a child icon static control.
myStatic.Create(_T("my static"),
WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE, CRect(10, 10, 150, 50),
pParentWnd);
// If no image is defined for the static control, define the image
// to the system arrow and question mark cursor.
if (myStatic.GetCursor() == NULL)
myStatic.SetCursor(::LoadCursor(NULL, IDC_HELP));
CStatic::GetEnhMetaFile
获取与 CStatic
关联的增强型元文件句柄,该句柄之前使用 SetEnhMetafile
进行设置。
HENHMETAFILE GetEnhMetaFile() const;
返回值
当前增强型元文件的句柄,或 NULL
(如果未设置增强型元文件)。
示例
CStatic myStatic;
// Create a child enhanced metafile static control.
myStatic.Create(_T("my static"),
WS_CHILD | WS_VISIBLE | SS_ENHMETAFILE | SS_CENTERIMAGE,
CRect(10, 10, 150, 50), pParentWnd);
// If no image is defined for the static control, define the image
// to be "myemf.emf."
if (myStatic.GetEnhMetaFile() == NULL)
myStatic.SetEnhMetaFile(::GetEnhMetaFile(_T("myemf.emf")));
CStatic::GetIcon
获取与 CStatic
关联的图标句柄,该句柄之前使用 SetIcon
进行设置。
HICON GetIcon() const;
返回值
当前图标的句柄,或 NULL
(如果未设置图标)。
示例
CStatic myStatic;
// Create a child icon static control.
myStatic.Create(_T("my static"),
WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE, CRect(10, 10, 150, 50),
pParentWnd);
// If no icon is defined for the static control, define the icon
// to the system error icon.
if (myStatic.GetIcon() == NULL)
myStatic.SetIcon(::LoadIcon(NULL, IDI_ERROR));
CStatic::SetBitmap
将新位图与静态控件相关联。
HBITMAP SetBitmap(HBITMAP hBitmap);
参数
hBitmap
要在静态控件中绘制的位图句柄。
返回值
先前与静态控件关联的位图句柄,或 NULL
(如果没有位图与静态控件关联)。
备注
位图将在静态控件中自动绘制。 默认情况下,它将绘制在左上角,并且静态控件将调整为位图的大小。
可以使用各种窗口和静态控件样式,包括:
SS_BITMAP
始终将此样式用于位图。SS_CENTERIMAGE
用于在静态控件中居中图像。 如果图像大于静态控件,则会对其进行剪裁。 如果它小于静态控件,则图像周围的空白区域将由位图左上角的像素颜色填充。MFC 提供了
CBitmap
类,在需要对位图图像执行更多操作时,可以使用该类,而不仅仅是调用 Win32 函数LoadBitmap
。CBitmap
包含一种 GDI 对象,通常与CStatic
配合使用,CStatic
是CWnd
类,用于将图形对象显示为静态控件。
CImage
是一个 ATL/MFC 类,可让你更轻松地使用与设备无关的位图 (DIB)。 有关详细信息,请参阅 CImage
类。
- 典型用法是为
CStatic::SetBitmap
提供一个 GDI 对象,该对象由CBitmap
或CImage
对象的 HBITMAP 运算符返回。 执行此操作的代码类似于以下行。
MyStaticControl.SetBitmap(HBITMAP(MyBitmap));
以下示例在堆上创建两个 CStatic
对象。 然后它使用 CBitmap::LoadOEMBitmap
加载带有系统位图的对象,使用 CImage::Load
从文件加载另一个对象。
示例
// Code such as this could be placed in the OnInitDialog callback.
// It creates two bitmap static controls on the heap, using members
// _m_pCStatic_A and _m_pCStatic_B to identify them so that they can
// be destroyed when no longer needed.
CBitmap CBmp;
CImage CImg;
// Create a child bitmap static control and load it from a CBitmap object.
_m_pCStatic_A = new CStatic;
_m_pCStatic_A->Create(_T("A bitmap static control (A)"),
WS_CHILD|WS_BORDER|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(16,16,64,64),
pParentWnd);
CBmp.LoadOEMBitmap(OBM_CLOSE); // Loads one of the default Windows bitmaps
_m_pCStatic_A->SetBitmap( HBITMAP(CBmp) );
_m_pCStatic_A->ShowWindow( SW_SHOW );
// Create a child bitmap static control and load it from a CImage object.
_m_pCStatic_B = new CStatic;
_m_pCStatic_B->Create(_T("A bitmap static control (B)"),
WS_CHILD|WS_BORDER|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(90,16,138,64),
pParentWnd);
CImg.Load( _T("test.png") );
if( _m_pCStatic_B->GetBitmap( ) == NULL )
_m_pCStatic_B->SetBitmap( HBITMAP(CImg) );
/* Then, later:
delete( _m_pCStatic_A );
delete( _m_pCStatic_B );
*/
CStatic::SetCursor
将新的光标图像与静态控件相关联。
HCURSOR SetCursor(HCURSOR hCursor);
参数
hCursor
要在静态控件中绘制的光标句柄。
返回值
先前与静态控件关联的光标句柄,或 NULL
(如果没有光标与静态控件关联)。
备注
光标将在静态控件中自动绘制。 默认情况下,它将绘制在左上角,并且静态控件将调整为光标的大小。
可以使用各种窗口和静态控件样式,包括:
SS_ICON
始终将此样式用于光标和图标。SS_CENTERIMAGE
用于在静态控件中居中。 如果图像大于静态控件,则会对其进行剪裁。 如果它小于静态控件,则图像周围的空白区域将填充静态控件的背景色。
示例
CStatic myStatic;
// Create a child icon static control.
myStatic.Create(_T("my static"),
WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE, CRect(10, 10, 150, 50),
pParentWnd);
// If no image is defined for the static control, define the image
// to the system arrow and question mark cursor.
if (myStatic.GetCursor() == NULL)
myStatic.SetCursor(::LoadCursor(NULL, IDC_HELP));
CStatic::SetEnhMetaFile
将新的增强型元文件图像与静态控件相关联。
HENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile);
参数
hMetaFile
要在静态控件中绘制的增强型元文件的句柄。
返回值
先前与静态控件关联的增强型元文件的句柄,或 NULL
(如果没有增强型元文件与静态控件关联)。
注解
增强元文件将自动绘制在静态控件中。 增强元文件会进行缩放,以适应静态控件的大小。
可以使用各种窗口和静态控件样式,包括:
SS_ENHMETAFILE
将此样式始终用于增强型元文件。
示例
CStatic myStatic;
// Create a child enhanced metafile static control.
myStatic.Create(_T("my static"),
WS_CHILD | WS_VISIBLE | SS_ENHMETAFILE | SS_CENTERIMAGE,
CRect(10, 10, 150, 50), pParentWnd);
// If no image is defined for the static control, define the image
// to be "myemf.emf."
if (myStatic.GetEnhMetaFile() == NULL)
myStatic.SetEnhMetaFile(::GetEnhMetaFile(_T("myemf.emf")));
CStatic::SetIcon
将新的图标图像与静态控件相关联。
HICON SetIcon(HICON hIcon);
参数
hIcon
要在静态控件中绘制的图标句柄。
返回值
先前与静态控件关联的图标句柄,或 NULL
(如果没有图标与静态控件关联)。
注解
图标将在静态控件中自动绘制。 默认情况下,它将绘制在左上角,并且静态控件将调整为图标的大小。
可以使用各种窗口和静态控件样式,包括:
SS_ICON
始终将此样式用于光标和图标。SS_CENTERIMAGE
用于在静态控件中居中。 如果图像大于静态控件,则会对其进行剪裁。 如果它小于静态控件,则图像周围的空白区域将填充静态控件的背景色。
示例
CStatic myStatic;
// Create a child icon static control.
myStatic.Create(_T("my static"),
WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE, CRect(10, 10, 150, 50),
pParentWnd);
// If no icon is defined for the static control, define the icon
// to the system error icon.
if (myStatic.GetIcon() == NULL)
myStatic.SetIcon(::LoadIcon(NULL, IDI_ERROR));
另请参阅
CWnd
类
层次结构图
CWnd
类
CButton
类
CComboBox
类
CEdit
类
CListBox
类
CScrollBar
类
CDialog
类