天天看點

SCROLLINFO結構體中fMask和nPage的了解

還是VC++中有關顯示圖像的問題。

我們在顯示一幅比較大的圖像時,要使用帶标準滾動條的對話框。涉及對滾動條的操作就不得不提SCROLLINFO這個結構體。隻看單詞意思就這道這個結構體要儲存滾動條的一些資訊。究竟是哪些資訊呢?我們先看看這個結構體的定義:

typedef struct tagSCROLLINFO

{

  UINT cbSize ;   // SCROLLINFO結構體長度的位元組數

  UINT fMask ;    // 指定結構體中哪些成員有效

  int nMin;       // 滾動範圍最小尺寸

  int nMax;        // 滾動範圍的最小尺寸

  UINT nPage ;        // 頁尺寸,用來确定比例卷軸欄的大小

  int nPos ;     // 卷軸欄的位置

  int nTrackPos ;   //

}SCROLLINFO,*LPSCROLLINFO;

typedef SCROLLINFO CONST *LPCSCROLLINFO

好了,與其說這個結構體儲存的是滾動條的資訊,不如說它儲存了滾動塊的資訊。滾動塊就是滾動條上的那個滑塊。下面我們具體說說這個結構體中幾個成員的含義。

首先,fMask,指定哪些成員有效,它的值是這些常亮:SIF_ALL,表示整個結構體都有效,SIF_PAGE,表示nPage成員有效,SIF_POS:nPos成員有效,SIF_RANGE, nMax和nMin有效。這些常量可以用或連接配接。

nMin:這個值我們通常都設定為0

nMax: 對于這個值,如果我們想在整個客戶區顯示一個比客戶區還要大的圖檔,這個值就應該等于圖檔大小和客戶區大小的差(水準和豎直兩個方向上)

nPage:這個屬性表示頁尺寸,怎麼了解這個屬性呢。首先,它的設定是為了根據比例确定滾動塊的大小。這個值通常就取客戶區的大小。但是要特别注意:當nMax<=nPage時,這時候如果使用nPage屬性,将不會顯示滾動條!!!!前面說過,nPage的設定是為了根據比例設定滾動塊的大小。我們平時看到的滾動條的滾動塊有大有小,有的滾動塊的大小還會随着浏覽篇幅的變化而變化。與這個nPage屬性有很大關系。但是:nMax<=nPage不代表沒有必要使用滾動條,隻要nMax>nMin ,就是需要滾動條的,但是當nMax<nPage時,我們通常不設定nPage 屬性(設定分fMask時不選SIF_PAGE),這樣就可以顯示出滾動條了,隻不過滾動塊的大小是标準大小,不是根據比例确定的大小而已。