关于静态控件

应用程序通常使用静态控件来标记其他控件或分隔一组控件。 虽然静态控件是子窗口,但不能选择它们。 因此,它们无法接收键盘焦点,并且不能具有键盘接口。 具有 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 的静态 _ 控件。

消息 默认操作
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,则返回该控件; _ 否则返回 HTTRANSPARENT。
WM _ 绘制 重新绘制控件。
WM _ SETFONT 设置文本静态控件的字体和重绘。
WM _ SETTEXT 设置文本静态控件的文本和重绘。

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