c语言中是窗口停留,一、Windows模态对话框—Tab停留和分组

2023-05-16

在第九章,我们利用窗口子类别化为COLORS1增加功能,使我们能够按下Tab键从一个滚动条转移到另一个滚动条。在对话框中,窗口子类别化是不必要的,因为Windows完成了将输入焦点从一个控件移动到另一个控件的所有工作。尽管如此,您必须在对话框模板中使用WS_TABSTOP和WS_GROUP窗口样式达到此目的。对于所有想要使用Tab键存取的控件,都要在其窗口样式中指定WS_TABSTOP。

如果参阅表11-1,您就会注意到许多控件将WS_TABSTOP定义为内定样式,其它一些则没有将它作为内定样式。一般而言,不包含WS_TABSTOP样式的控件(特别是静态控件)不应该取得输入焦点,因为即使有了输入焦点,它们也不能完成操作。除非在处理WM_INITDIALOG消息时您将输入焦点设定给一个特定的控件,并从消息中传回FALSE。否则Windows将输入焦点设定为对话框内第一个具有WS_TABSTOP样式的控件。

Windows给对话框增加的第二个键盘接口包括光标移动键,这种接口对于单选按钮有特殊的重要性。如果您使用Tab键移动到某一组内目前选中的单选按钮,那么,就需要使用光标移动键,将输入焦点从该单选按钮移动到组内其它单选按钮上。使用WS_GROUP窗口样式即可获得这个功能。对于对话框模板中的特定控件序列,Windows将使用光标移动键把输入焦点从第一个具有WS_GROUP样式的控制权切换到下一个具有WS_GROUP样式的控件中。如果有必要,Windows将从对话框的最后一个控件循环到第一个控件,以便找到分组的结尾。

在内定设定下,控件LTEXT、CTEXT、RTEXT和ICON包含有WS_GROUP样式,这种样式方便地标记了分组的结尾。您必须经常将WS_GROUP样式加到其它型态的控件中。

让我们来看一看ABOUT2.RC中的对话框模板。四个具有WS_TABSTOP样式的控件是每个组的第一个单选按钮(明显地包含)和两个按键(内定设定)。在第一次启动对话框时,您可以使用Tab键在这四个控件之间移动。

在每组单选按钮中,您可以使用光标移动键切换输入焦点并改变选中标记。例如,Color下拉式清单方块的第一个单选按钮(Black)和Figure下拉式清单方块都具有WS_GROUP样式。这意味着您可以用光标移动键将焦点从「Black」单选按钮移动到Figure分组方块中。类似的情形,Figure分组方块的第一个单选按钮(Rectangle)和DEFPUSHBUTTON都具有WS_GROUP样式,所以您可以使用光标移动键在组内两个单选按钮-Rectangle和Ellipse之间移动。两个按键都有WS_GROUP样式,以阻止光标移动键在按键具有输入焦点时起作用。

使用ABOUT2时,Windows的对话框管理器在两组单选按钮中完成一些相当复杂的处理。正如所预期的那样,处于单选按钮组内时,光标移动键切换输入焦点,并给对话框程序发送WM_COMMAND消息。但是,当您改变了组内选中的单选按钮时,Windows也给新选中的单选按钮设定了WS_TABSTOP样式。当您下一次使用Tab切换到这一组后,Windows将会把输入焦点设定为选中的单选按钮。

文字字段中的「&」将导致紧跟其后的字母以底线显示,这就增加了另一种键盘接口,您可以通过按底线字母来将输入焦点移动到任意单选按钮上。透过按下C(代表Color下拉式清单方块)或者F(代表Figure下拉式清单方块),您可以将输入焦点移动到相对应组内目前选中的单选按钮上。

尽管程序写作者通常让对话框管理器来完成这些工作,但是Windows提供了两个函数,以便程序写作者找寻下一个或者前一个Tab键停留项或者组项。这些函数为:

hwndCtrl = GetNextDlgTabItem (hDlg, hwndCtrl, bPrevious) ;

hwndCtrl = GetNextDlgGroupItem (hDlg, hwndCtrl, bPrevious) ;

如果bPrevious为TRUE,那么函数传回前一个Tab键停留项或组项;如果为FALSE,则传回下一个Tab键停留项或者组项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言中是窗口停留,一、Windows模态对话框—Tab停留和分组 的相关文章

随机推荐