四、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键从一个滚动条跳到另一个滚动条的功能。
