呼叫SetScrollInfo设置其位置。程式然後呼叫GetScrollInfo。如果该位置超出了SetScrollInfo呼叫的范围,则由Windows来纠正该位置并且在GetScrollInfo呼叫中传回正确的值。
SYSMETS3使用ScrollWindow函式在视窗的显示区域中卷动资讯而不是重画它。虽然该函式很复杂(在新版本的Windows中已被更复杂的ScrollWindowEx所替代),SYSMETS3仍以相当简单的方式使用它。函式的第二个参数给出了水平卷动显示区域的数值,第三个参数是垂直卷动显示区域的数值,单位都是图素。
ScrollWindow的最後两个参数设定为NULL,这指出了要卷动整个显示区域。Windows自动把显示区域中未被卷动操作覆盖的矩形设为无效。这会产生WM_PAINT讯息。再也不需要InvalidateRect了。注意ScrollWindow不是GDI函式,因为它不需装置内容代号。它是少数几个非GDI的Windows函式之一,它可以改变视窗的显示区域外观。很特殊但不方便,它是随卷动列函式一起记载在文件中。
WM_HSCROLL处理拦截SB_THUMBPOSITION通知码并忽略SB_THUMBTRACK。因而,如果使用者在水平卷动列上拖动卷动方块,在使用者释放滑鼠按钮之前,程式不会水平卷动视窗的内容。
WM_VSCROLL的方法与之不同:程式拦截SB_THUMBTRACK讯息并忽略SB_THUMBPOSITION。因而,程式随使用者在垂直卷动列上拖动卷动方块而垂直地滚动内容。这种想法很好,但应注意:一旦使用者发现程式会立即回应拖动的卷动方块,他们就会不断地来回拖动卷动方块。幸运的是现在的PC快得可以胜任这种严酷的测试。但是在较慢的机器上,可以考虑为GetSystemMetrics使用SB_SLOWMACHINE参数来替代这种处理。
加快WM_PAINT处理的一个方法由SYSMETS3展示:WM_PAINT处理程式确定无效区域中的文字行并仅仅重画这些行。当然,程式码复杂一些,但速度很快。
不用滑鼠怎么办
在Windows的早期,有大量的使用者不喜欢使用滑鼠,而且,Windows自身也不要求必须有滑鼠。虽然,没有滑鼠的PC现在走上了单色显示器和点阵印表机的没落之路,但我仍然建议您编写可以使用键盘来产生与滑鼠操作相同效果的程 |