| 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键从一个卷动列跳到另一个卷动列的功能。
视窗子类别化(Window Subclassing)
卷动列控制项的视窗讯息处理程式是Windows内部的。但是,将GWL_WNDPROC识别字作为参数来呼叫GetWindowLong,您就可以得到这个视窗讯息处理程式的位址。另外,您可以呼叫SetWindowLong给该卷动列设定一个新的视窗讯息处理程式,这个技术叫做「视窗子类别化」,非常有用。它能让您给现存的视窗讯息处理程式设定「挂勾」,以便在自己的程式中处理一些讯息,同时将其他所有讯息传递给旧的视窗讯息处理程式。
在COLORS1中对卷动讯息进行初步处理的视窗讯息处理程式叫做ScrollProc,它在COLORS1.C档案的尾部。由於ScrollProc是COLORS1中的函式,而Windows将呼叫COLORS1,所以S