关于静态控件

应用程序通常使用静态控件来标记其他控件或分隔一组控件。 虽然静态控件是子窗口,但无法选择它们。 因此,它们无法接收键盘焦点,并且不能有键盘界面。 具有SS_NOTIFY样式的静态控件接收鼠标输入,当用户单击或双击控件时通知父窗口。 静态控件属于 STATIC 窗口类。

尽管静态控件可用于重叠、弹出窗口和子窗口,但它们旨在用于对话框,其中系统标准化其行为。 通过使用对话框外部的静态控件,开发人员会增加应用程序可能以非标准方式行为的风险。 通常,开发人员在对话框中使用静态控件,或使用SS_OWNERDRAW样式创建自定义静态控件。

本部分将讨论以下主题。

静态控件类型

有四种类型的静态控件。 每个类型都有一个或多个 静态控件样式

简单图形静态控件

简单的图形静态控件显示框架或填充矩形。 可以采用多种样式绘制框架,包括黑色、灰色或白色。 此外,可以使用刻度样式绘制框架,使其具有三维外观。 框架样式包括SS_BLACKFRAME、SS_GRAYFRAME、SS_WHITEFRAME、SS_ETCHEDHORZ、SS_ETCHEDVERT和SS_ETCHEDFRAME。

矩形可以用三种样式之一填充颜色:黑色、灰色或白色。 这些样式由常量SS_BLACKRECT、SS_GRAYRECT和SS_WHITERECT定义。

无法组合图形样式。

文本静态控件

文本静态控件在五种样式之一的矩形中显示文本:

  • 左对齐而不换行
  • 左对齐与换行
  • 居中对齐
  • 右对齐
  • 简单

这些样式由常量分别由常量SS_LEFTNOWORDWRAP、SS_LEFT、SS_CENTER、SS_RIGHT和SS_SIMPLE定义。 系统以预定义的方式重新排列这些控件中的文本,但未重新排列的“简单”文本除外。

应用程序可以使用 SetWindowText 函数或 WM_SETTEXT 消息随时更改文本静态控件中的文本。

系统在静态控件中显示尽可能多的文本,并剪辑任何不适合的文本。 若要计算控件的适当大小,请检索文本的字体指标。 有关字体和字体指标的详细信息,请参阅 字体和文本

默认情况下,静态控件的窗口文本与其他控件一样,可以包含一个和号,它定义以下字符作为控件的快捷键 (,或者,对于大多数静态控件,对于它标记的控件,这是选项卡顺序中的下一个控件) 。 如果要在文本中显示和体,而不是使用它们来定义快捷方式,请包括SS_NOPREFIX样式。

图像静态控件

图像静态控件可以显示位图、图标 (包括动画图标) 或增强的图元文件。 特定静态控件显示的图形类型取决于控件的样式:SS_BITMAP、SS_ICON或SS_ENHMETAFILE。 应用程序在创建控件时指定样式,并指定控件要显示的位图、图标或图元文件的句柄。 创建控件后,应用程序可以通过向其发送 STM_SETIMAGE 消息,指定新图形对象的句柄,将不同的图形与控件相关联。 应用程序可以通过发送 STM_GETIMAGE 消息来检索当前与静态控件关联的图形对象的句柄。 应用程序使用 SendDlgItemMessage 函数将消息发送到静态控件。

Owner-Drawn静态控件

通过使用SS_OWNERDRAW样式,应用程序可以负责绘制静态控件。 所有者绘制的静态控件的父窗口 (其所有者) 每当需要绘制静态控件时接收 WM_DRAWITEM 消息。 该消息包含指向 DRAWITEMSTRUCT 结构的指针,该结构包含绘制控件时所有者窗口使用的信息。

静态控件默认消息处理

预定义静态控制窗口类的窗口过程对静态控制过程未处理的所有消息执行默认处理。 当静态控件返回任何消息的 FALSE 时,预定义的窗口过程会检查消息并执行下表中所述的默认操作。 在表中,文本静态控件是具有样式SS_LEFTNOWORDWRAP、SS_LEFT、SS_CENTER、SS_RIGHT或SS_SIMPLE的静态控件。

Message 默认操作
WM_CREATE 加载图形对象,并将窗口的大小调整为对象的大小,以用于图形静态控件。 对其他静态控件不执行任何操作。
WM_DESTROY 释放并销毁图形静态控件的任何图形对象。 对其他静态控件不执行任何操作。
WM_ENABLE 重新绘制可见的静态控件。
WM_ERASEBKGND 返回 TRUE,指示控件清除背景。
WM_GETDLGCODE 返回DLGC_STATIC。
WM_GETFONT 返回文本静态控件字体的句柄。
WM_GETTEXT 返回复制的字符数。
WM_GETTEXTLENGTH 返回文本静态控件的文本长度(以字符为单位)。
WM_LBUTTONDBLCLK 如果控件样式 SS_NOTIFY, 则向父窗口发送STN_DBLCLK通知代码。
WM_LBUTTONDOWN 如果控件样式SS_NOTIFY,则向父窗口发送 STN_CLICKED 通知代码。
WM_NCLBUTTONDBLCLK 如果控件样式 SS_NOTIFY, 则向父窗口发送STN_DBLCLK通知代码。
WM_NCLBUTTONDOWN 如果控件样式SS_NOTIFY,则向父窗口发送 STN_CLICKED 通知代码。
WM_NCHITTEST 如果控件样式SS_NOTIFY,则返回HTCLIENT;否则,返回 HTTRANSPARENT。
WM_PAINT 重新绘制控件。
WM_SETFONT 设置文本静态控件的字体和重新绘制。
WM_SETTEXT 设置文本静态控件的文本和重新绘制。

 

预定义的窗口过程将所有其他消息传递给 DefWindowProc 进行默认处理。