按钮状态
本部分讨论如何选择按钮更改其状态以及应用程序应如何响应。
本部分由以下主题组成:
按钮选择
用户可以通过三种方式选择按钮:通过鼠标单击按钮、按 Tab 键和按 Enter 键,或者(如果按钮是由 WS_GROUP 样式定义的组的一部分),方法是按 Tab 键转到组中的所选按钮,并使用箭头键在该组中移动。 这两种制表符方法是系统提供的预定义键盘界面的一部分。 有关此接口的完整说明,请参阅 对话框。
选择按钮通常会导致以下事件:
- 系统为按钮提供键盘焦点。
- 该按钮发送其父窗口一条消息,以通知其所选内容。
- 父窗口(或系统)发送一条消息以更改其状态的按钮。
- 父窗口(或系统)重新映射按钮以反映其新状态。
按钮状态的元素
按钮的状态可以按其焦点状态、推送状态和检查状态来特征。
焦点状态
焦点状态适用于复选框、单选按钮、按下按钮或所有者绘制的按钮。 当用户选择键盘焦点时,按钮将接收键盘焦点,当用户选择另一个控件时失去焦点。 一次只能有一个控件具有键盘焦点。
当按钮具有键盘焦点时,系统通常通过使用虚线围绕按钮来突出显示按钮的文本、图标或位图。 此外,当按钮具有焦点时,按钮具有沉重的深色边框。 系统会自动更改自动按钮的突出显示,但应用程序必须通过发送消息来更改非自动按钮的突出显示。
推送状态
推送状态适用于推送按钮、复选框、单选按钮或三态复选框,但不适用于其他按钮。 按钮的推送状态可以推送或未推送。 按下按钮(或者按下具有 BS_PUSHLIKE 样式的任何按钮)时,按钮将绘制为沉没按钮。 如果未按下,则会将其绘制为引发的按钮。 单击复选框、单选按钮或三态复选框时,按钮的背景为灰色。 如果未按下,按钮的背景不会灰显。
检查状态
该复选框状态适用于复选框、单选按钮或三态复选框,但不适用于其他按钮。 状态可以选中、清除或(对于三态复选框)不确定。 复选框在包含复选标记时选中,并在未选中时清除。 当单选按钮包含一个黑点时,将检查一个单选按钮;当它没有时,它将被清除。 当它包含复选标记时,将选中一个三态复选框,当它未选中时被清除,并且当它包含灰色框时处于不确定状态。 系统会自动更改自动按钮的检查状态,但应用程序必须更改非自动按钮的检查状态。
对按钮状态的更改
当用户选择按钮时,通常需要更改一个或多个按钮的状态元素。 系统会自动更改所有按钮类型的焦点状态、具有 BS_PUSHLIKE 样式的推送按钮或按钮的推送状态,以及所有自动按钮的检查状态。 应用程序必须进行所有其他状态更改,同时考虑按钮的类型、样式和当前状态。 以下列表显示了必须为每个按钮类型更改的状态元素:
- 复选框必须更改检查状态。
- 单选按钮必须更改检查状态。 此外,可能需要更改同一组中其他单选按钮的检查状态,以确保单选按钮的互斥性质。
- 由于所有者绘制按钮的状态依赖于应用程序,因此应用程序必须在按钮中更改的内容可能会有所不同。 无法更改组框的元素,因为用户无法选择组框。
应用程序可以通过向其发送 BM_GETCHECK 或 BM_GETSTATE 消息来确定按钮的状态;应用程序可以通过向其发送 BM_SETCHECK 或 BM_SETSTATE 消息来设置按钮的状态。