Button 状态

本部分讨论如何选择按钮更改其状态以及应用程序应如何响应。

本部分包括以下主题:

按钮选择

用户可以通过三种方式选择按钮:使用鼠标单击按钮、按 Tab 键然后按 Enter 键,或者(如果按钮是 WS_GROUP 样式定义的组的一部分)按 Tab 键转到组中的选定按钮,并使用箭头键在该组中移动。 这两种 Tab 键输入方法是系统提供的预定义键盘界面的一部分。 有关此接口的完整说明,请参阅对话框

选择按钮通常会导致以下事件:

  • 系统为按钮提供键盘焦点。
  • 该按钮向其父窗口发送一条消息,以通知其所选内容。
  • 父窗口(或系统)向按钮发送一条更改其状态的消息。
  • 父窗口(或系统)重新绘制按钮以反映其新状态。

按钮状态的元素

按钮具有焦点状态、按下状态和选中状态。

焦点状态

焦点状态适用于复选框、单选按钮、按钮或所有者绘制的按钮。 当用户选择按钮时,按钮将接收键盘焦点,当用户选择另一个控件时将失去焦点。 一次只能有一个控件具有键盘焦点。

当按钮具有键盘焦点时,系统通常通过使用虚线围绕按钮来突出显示按钮的文本、图标或位图。 此外,具有焦点的按钮具有深黑色边框。 系统会自动更改自动按钮的突出显示,但应用程序必须通过发送消息来更改非自动按钮的突出显示。

按下状态

按下状态适用于一个按钮、复选框、单选按钮或三态复选框,但不适用于其他按钮。 按钮的按下状态可以是按下或未按下。 按下按钮(或任何具有 BS_PUSHLIKE 样式的按钮)时,按钮将绘制为凹陷按钮。 未按下时绘制为凸起的按钮。 单击复选框、单选按钮或三态复选框时,按钮的背景为灰色。 未按下时按钮的背景不灰显。

选中状态

选中状态适用于复选框、单选按钮或三态复选框,但不适用于其他按钮。 状态可以是选中、清除或(对于三态复选框)不确定。 当复选框包含选中标记时,将选中复选框,不包含时则清除。 单选按钮在包含黑点时选中;不包含时清除。 当包含选中标记时,将选中一个三态复选框,不包含时为清除,包含灰色框时则为不确定。 系统会自动更改自动按钮的选中状态,但应用程序必须更改非自动按钮的选中状态。

按钮状态更改

当用户选择按钮时,通常需要更改一个或多个按钮的状态元素。 系统会自动更改所有按钮类型的焦点状态、按钮或具有 BS_PUSHLIKE 样式的按钮的按下状态,以及所有自动按钮的选中状态。 应用程序必须进行所有其他状态更改,同时考虑按钮的类型、样式和当前状态。 以下列表显示必须为每个按钮类型更改的状态元素:

  • 复选框必须更改选中状态。
  • 单选按钮必须更改选中状态。 可能还需要更改同一组中其他单选按钮的选中状态,以确保单选按钮的相互排斥性质。
  • 由于所有者绘制的按钮的状态依赖于应用程序,因此应用程序必须对按钮进行的更改可能会有所不同。 不得更改组框的元素,因为用户无法选择组框。

应用程序可以通过向按钮发送 BM_GETCHECKBM_GETSTATE 消息来确定按钮的状态;应用程序可以通过向按钮发送 BM_SETCHECKBM_SETSTATE 消息来设置按钮的状态。