|
0, iVscrollMax, TRUE) ;
假定NUMLINES等於75,并假定特定视窗大小是:50(cyChar除以cyClient)。换句话说,我们有75行资讯但只有50行可以显示在显示区域中。使用上面的两行程式码,把范围设置最小为0,最大为25。当卷动列位置等於0时,程式显示0到49行。当卷动列位置等於1时,程式显示1到50行;并且当卷动列位置等於25(最大值)时,程式显示25到74行。很明显需要对程式的其他部分做出修改,但这是可行的。
新卷动列函式的一个好的功能是当使用与卷动列范围一样大的页面时,它已经为您做掉了一大堆杂事。可以像下面的程式码一样使用SCROLLINFO结构和SetScrollInfo:
si.cbSize = sizeof (SCROLLINFO) ; si.cbMask = SIF_RANGE | SIF_PAGE ; si.nMin = 0 ; si.nMax = NUMLINES - 1 ; si.nPage = cyClient / cyChar ; SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;
这样做之後,Windows会把最大的卷动列位置限制为si.nMax - si.nPage
+1而不是si.nMax。像前面那样做出假设:NUMLINES等於75
(所以si.nMax等於74),si.nPage等於50。这意味著最大的卷动列位置限制为74 - 50 + 1,即25。这正是我们想要的。
当页面大小与卷动列范围一样大时,会发生什么情况呢?在这个例子中,就是nPage等於75或更大的情况。Windows通常隐藏卷动列,因为它并不需要。如果不想隐藏卷动列,可在呼叫SetScrollInfo时使用SIF_DISABLENOSCROLL,Windows只是让那个卷动列不能被使用,而不隐藏它。
新SYSMETS
SYSMETS3-此章中最後的SYSMETS程式版本-显示在程式4-4中。此版本使用SetScrollInfo和GetScrollInfo函式,添加左右卷动的水平卷动列,并能更有效地重画显示区域。
程式4-4 SYSMETS3 SYSMETS3.C /*------------------------------------------------------------------ SYSMETS3.C -- System Met |