SCROLLINFO結構的使用

來源:互聯網
上載者:User

在視窗程序中添加捲軸很容易,只要在CreateWindow中將WS(window style)添加WS_VSCROLL與WS_HSCROLL即可,然後再調用相應的函數就可以使用了。
捲軸有範圍和位置(捲動方塊在捲軸上的位置)屬性,設定範圍和位置可以使用之前的函數,如: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函數獲得的,
也是之前通過Set函數設定的值。

SCROLLINFO結構:

The SCROLLINFO structure contains scroll bar parameters to be set by the SetScrollInfo

function (or SBM_SETSCROLLINFO message), or retrieved by the GetScrollInfo function

(or SBM_GETSCROLLINFO message).

typedef struct tagSCROLLINFO {

UINT cbSize;

UINT fMask;

int nMin;

int nMax;

UINT nPage;

int nPos;

int nTrackPos;

} SCROLLINFO, *LPSCROLLINFO;

typedef SCROLLINFO CONST *LPCSCROLLINFO;

成員說明:
cbSize: SCROLLINFO結構長度位元組數,該值在設定和查詢參數時都必須填寫。
fMask: 指定結構中的哪些成員是有效,該值共有如下5種選擇,可以選擇多種用“OR”組合起來,該值在

設定和查詢參數時都必須填寫。
SIF_ALL      :整個結構都有效
SIF_DISABLENOSCROLL:該值僅在設定參數時使用,視控制項參數設定的需要來對本結構的成員進行取捨。
SIF_PAGE      :nPage成員有效
SIF_POS      :nPos成員有效
SIF_RANGE     :nMin和nMax成員有效
nMin:滾動範圍最小值
nMax:滾動範圍最大值
nPage:頁尺寸,用來確定比例捲動方塊的大小
nPos:捲動方塊的位置
nTrackPos:拖動時捲動方塊的位置,該參數只能查詢,不能設定。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.