四、Windows子窗口控件的滚动条类别—自动键盘接口
滚动条控件也能处理键盘输入,但是只有在拥有输入焦点时才行。下表说明怎样将键盘光标键转变为卷动消息:
表9-5 |
游标键 |
卷动消息的wParam值 |
Home |
SB_TOP |
End |
SB_BOTTOM |
Page Up |
SB_PAGEUP |
Page Down |
SB_PAGEDOWN |
左或上 |
SB_LINEUP |
右或下 |
SB_LINEDOWN |
事实上,SB_TOP和SB_BOTTOM卷动消息只能用键盘产生。在使用鼠标按动卷动列时,如果想使该卷动列获得输入焦点,那么您必须将WS_TABSTOP标识符包含到CreateWindow呼叫的窗口类别参数中。当滚动条拥有输入焦点时,在该滚动条的小方框上将显示一个闪烁的灰色块。
为了给滚动条提供全面的键盘接口,还需要另外一些工作。首先,WndProc窗口消息处理程序必须使滚动条拥有输入焦点,它是通过处理WM_SETFOCUS消息来完成这一点的,该WM_SETFOCUS消息是当滚动条获得输入焦点时其父窗口接收到的。WndProc给其中一个滚动条设定输入焦点。
SetFocus (hwndScroll[idFocus]) ;
其中idFocus是一个整体变量。
但是,还需要一些借助键盘尤其是Tab键,来从一个滚动条转换到另一个滚动条的方法。这比较困难,因为一旦某个滚动条拥有了输入焦点,它就处理所有的键盘输入,但滚动条只关心光标键,而忽略Tab键。解决这一两难处境的方法是「窗口子类别化」。我们将用它来给COLORS1增加使用Tab键从一个滚动条跳到另一个滚动条的功能。