默认情况下,当用户按下方向键时,Windows将输入焦点移动到下一个或上一个控件。只要具有输入焦点的当前控件不处理这些键,并且下一个或上一个控件不是静态控件,则Windows将继续按照用户继续按方向键的方式将输入焦点移动到对话框中的所有控件。
应用程序可以使用WS_GROUP样式来修改此默认行为。风格标志着一组控件的开始。如果组中的控件在用户开始按方向键时具有输入焦点,焦点保留在组中。通常,组中的第一个控件必须具有WS_GROUP样式,组中的所有其他控件必须具有此样式。组中的所有控件必须是连续的__,即它们必须是连续创建的,没有中间的控件。
当用户按下方向键时,Windows首先确定具有输入焦点的当前控制是否处理方向键。Windows向控件发送WM_GETDLGCODE消息,如果控件返回DLGC_WANTARROWS值,则将该密钥传递给控件。否则,Windows使用GetNextDlgGroupItem功能来确定组中的下一个控件。
GetNextDlgGroupItem按照创建的顺序(或相反的顺序)搜索控件。如果用户按右或右键,GetNextDlgGroupItem如果该控件【不】具有WS_GROUP样式,则返回下一个控件。否则,该函数反转搜索的顺序并返回具有WS_GROUP样式的第一个控件。如果用户按下LEFT或UP键,则该函数返回上一个控件,除非当前控件已经具有WS_GROUP样式。如果当前控件具有此样式,该函数将反转搜索顺序,找到具有WS_GROUP样式的第一个控件,并返回紧接在位置控件之前的控件。
一旦Windows具有下一个或上一个控件,它将向控件发送WM_GETDLGCODE消息以确定控件类型。Windows然后移动输入焦点以控制它是否不是静态控件。如果控件是自动单选按钮,则Windows向其发送BM_CLICK消息。应用程序也可以使用GetNextDlgGroupItem来定位组中的控件。
通常,组中的第一个控件组合了WS_GROUP和WS_TABSTOP样式,以便用户可以使用TAB键从组移动到组。如果组包含单选按钮,则应用程序应仅将WS_TABSTOP样式应用于组中的第一个控件。当用户在组中的控件之间移动时,Windows会自动移动样式。这确保当用户使用TAB键移动到组时,输入焦点将始终位于最近选择的控件上。