捲動列資訊函式

捲動列檔案(在/Platform SDK/User Interface Services/Controls/Scroll Bars中)指出SetScrollRange、SetScrollPos、GetScrollRange和GetScrollPos函式是「過時的」,但這並不完全正確。這些函式在Windows 1.0中就出現了,在Win32 API中升級以處理32位元參數。它們仍然具有良好的功能。而且,它們不與Windows程式設計中新函式相衝突。

特點,功能,用法,定義,結構,

特點

Win32 API介紹的兩個捲動列函式稱作SetScrollInfo和GetScrollInfo。這些函式可以完成以前函式的全部功能,並增加了兩個新特性。
第一個功能涉及捲動方塊的大小。您可能注意到,捲動方塊大小在SYSMETS2程式中是固定的。然而,在您可能使用到的一些Windows套用程式中,捲動方塊大小與在視窗中顯示的檔案大小成比例。顯示的大小稱作「頁面大小」。
可以使用SetScrollInfo來設定頁面大小(從而設定了捲動方塊的大小),如將要看到的SYSMETS3程式所示。

功能

GetScrollInfo函式增加了第二個重要的功能,或者說它改進了目前API的不足。假設您要使用65,536或更大單位的範圍,這在16位元Windows中是不可能的。當然在Win32中,函式被定義為可接受32位元參數,因此是沒有問題的。(記住如果使用這樣大的範圍,捲動方塊的實際物理位置數仍然由捲動列的圖素大小限制)。然而,當使用SB_THUMBTRACK或SB_THUMBPOSITION通知碼得到WM_VSCROLL或WM_HSCROLL訊息時,只提供了16位元資料來指出捲動方塊的目前位置。通過GetScrollInfo函式可以取得真實的32位元值。

用法

SetScrollInfo和GetScrollInfo函式的語法是
SetScrollInfo (hwnd, iBar, &si, bRedraw) ;
GetScrollInfo (hwnd, iBar, &si) ;
像在其他捲動列函式中那樣,iBar參數是SB_VERT或SB_HORZ,它還可以是用於捲動列控制的SB_CTL。SetScrollInfo的最後一個參數可以是TRUE或FALSE,指出了是否要Windows重新繪製計算了新資訊後的捲動列。

定義

兩個函式的第三個參數是SCROLLINFO結構,定義為:
typedef struct tagSCROLLINFO
{
UINT cbSize ; // set to sizeof (SCROLLINFO)
UINT fMask ; // values to set or get
int nMin ; // minimum range value
int nMax ;// maximum range value
UINT nPage ; // page size
int nPos ;// current position
int nTrackPos ;// current tracking position
}
SCROLLINFO, * PSCROLLINFO ;

結構

在程式中,可以定義如下的SCROLLINFO結構型態:
SCROLLINFO si ;
在呼叫SetScrollInfo或GetScrollInfo之前,必須將cbSize欄位設定為結構的大小:
si.cbSize = sizeof (si) ;
si.cbSize = sizeof (SCROLLINFO) ;
逐漸熟悉Windows後,您就會發現另外幾個結構像這個結構一樣,第一個欄位指出了結構大小。這個欄位使將來的Windows版本可以擴充結構並添加新的功能,並且仍然與以前編譯的版本相容。
把fMask欄位設定為一個以上以SIF字首開頭的旗標,並且可以使用C的位元操作OR運運算元(|)組合這些旗標。
SetScrollInfo函式使用SIF_RANGE旗標時,必須把nMin和nMax欄位設定為所需的捲動列範圍。GetScrollInfo函式使用SIF_RANGE旗標時,應把nMin和nMax欄位設定為從函式傳回的目前範圍。
SIF_POS旗標也一樣。當通過SetScrollInfo使用它時,必須把結構的nPos欄位設定為所需的位置。可以通過GetScrollInfo使用SIF_POS旗標來取得目前位置。
使用SIF_PAGE旗標能夠取得頁面大小。用SetScrollInfo函式把nPage設定為所需的頁面大小。GetScrollInfo使用SIF_PAGE旗標可以取得目前頁面的大小。如果不想得到比例化的捲動列,就不要使用該旗標
當處理帶有SB_THUMBTRACK或SB_THUMBPOSITION通知碼的WM_VSCROLL或WM_HSCROLL訊息時,通過GetScrollInfo只使用SIF_TRACKPOS旗標。從函式的傳回中,SCROLLINFO結構的nTrackPos欄位將指出目前的32位元的捲動方塊位置。
在SetScrollInfo函式中僅使用SIF_DISABLENOSCROLL旗標。如果指定了此旗標,而且新的捲動列參數使捲動列消失,則該捲動列就不能使用了(下面會有更多的解釋)。
SIF_ALL旗標是SIF_RANGE、SIF_POS、SIF_PAGE和SIF_TRACKPOS的組合。在WM_SIZE訊息處理期間設定捲動列參數時,這是很方便的(在SetScrollInfo函式中指定SIF_TRACKPOS後,它會被忽略)。這在處理捲動列訊息時也是很方便的。

熱門詞條

聯絡我們