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 以在完成后将其销毁。

继承层次结构

CObject

CCmdTarget

CWnd

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 函数 LoadBitmapCBitmap 包含一种 GDI 对象,通常与 CStatic 配合使用,CStaticCWnd 类,用于将图形对象显示为静态控件。

CImage 是一个 ATL/MFC 类,可让你更轻松地使用与设备无关的位图 (DIB)。 有关详细信息,请参阅 CImage

  • 典型用法是为 CStatic::SetBitmap 提供一个 GDI 对象,该对象由 CBitmapCImage 对象的 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