在剛開始使用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...