SCROLLINFO結構詳解

2022-07-26 10:21:09 字數 1614 閱讀 3010

在剛開始使用scrollinfo結構時感覺很不順手,尤其其中的成員fmask理解不太深刻,經過查詢資料才理解一二。

在使用滾動條功能時,如果要設定它的範圍和位置可以用以前的函式,例如:setscrollrange()、 setscrollpos()、getscrollrange()、getscrollpos()等,但目前通常使用setscrollinfo()與 getscrollinfo(),使用這兩個函式就要用到scrollinfo結構。 

可以先定義乙個scrollinfo結構變數si,用&si作為以上兩個函式的引數。同beginpaint()中的&ps、gettextmetrics()中的&tm等,這些結構都是通過這些函式被填充各域或取得各域的值。beginpaint是填充ps的各域的值,gettextmetrics是取得tm結構各域的值,而 setscrollinfo()與getscrollinfo()分別填充和取得。

無論是set還是get,都得先設定si結構的第乙個域的值,即賦給cbsize結構的大小。之後根據設定的fmask域的值進行set或get,當set時,需要根據fmask的值將相關的域填充後再呼叫 setscrollinfo(),這樣si結構就被set成功。當get時,直接呼叫getscrollinfo(),具體能使用哪些域的值是根據所設定的fmask域的值定的。

如果要設定滾動條的範圍和頁面大小時,可編寫以下**:

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) ;

而若要用到滾動條的位置時,可以這樣使用:

先si.cbsize = sizeof (si) ; 

si.fmask = sif_all ; // 表示get後將使用si結構的位置、頁面大小等量

getscrollinfo (hwnd, sb_vert, &si)

然後就可直接使用si.npos、si.npage、si.ntrackpos等量,這些量就是從si結構中通過get函式獲得的,

platform sdk中如下描述:

成員說明:

cbsize: scrollinfo結構長度位元組數,該值在設定和查詢引數時都必須填寫。

fmask: 指定結構中的哪些成員是有效,該值共有如下5種選擇,可以選擇多種用「or」組合起來,該值在

設定和查詢引數時都必須填寫。

sif_all      :整個結構都有效

sif_disablenoscroll:該值僅在設定引數時使用,視控制項引數設定的需要來對本結構的成員進行取捨。

sif_page      :npage成員有效

sif_pos      :npos成員有效

sif_range     :nmin和nmax成員有效

nmin:滾動範圍最小值

nmax:滾動範圍最大值

npage:頁尺寸,用來確定比例滾動框的大小

npos:滾動框的位置

ntrackpos:拖動時滾動框的位置,該引數只能查詢,不能設定。

SCROLLINFO結構詳解

在剛開始使用scrollinfo結構時感覺很不順手,尤其其中的成員fmask理解不太深刻,經過查詢資料才理解一二。在使用滾動條功能時,如果要設定它的範圍和位置可以用以前的函式,例如 setscrollrange setscrollpos getscrollrange getscrollpos 等,但...

SCROLLINFO結構詳解

在剛開始使用scrollinfo結構時感覺很不順手,尤其其中的成員fmask理解不太深刻,經過查詢資料才理解一二。在使用滾動條功能時,如果要設定它的範圍和位置可以用以前的函式,例如 setscrollrange setscrollpos getscrollrange getscrollpos 等,但...

BITMAPINFO結構詳解

bitmapinfo結構定義了windows裝置無關位圖 dib 的度量和顏色資訊typedef struct tagbitmapinfo bitmapinfo 位圖資訊頭bitmapinfoheader,也是乙個結構體,其定義如下 typedef struct tagbitmapinfoheade...