滾動控件(ScrollBar)
滾動條(ScrollBar)主要用來從某一預定義值范圍內快速有效地進行選擇。滾動條分垂直滾動條和水平滾動條兩種。在滾動條內有一個滾動框,用來表示當前的值。用鼠標單擊滾動條,可以使滾動框移動一頁,鼠標單擊滾動條兩端的剪頭可以使滾動框移動一行,也可以直接拖動滾動框。許多窗口控件如列表框和組合框等都帶有滾動條子窗口。Win32的滾動條支持比例滾動框,即用滾動框的大小來反映頁相對于整個范圍的大小。
當CreateWindowEx創建滾動條時,其風格常數中帶SBS_VERT為水平滾動條,不帶SBS_VERT或帶SBS_HORZ為垂直滾動條。
創建控件時應初始化滾動條的各種參數。
應用程序可以通過調用SendMessage向控件發送如下消息來設定控件各種參數。
uMsg | wParam | lParam | 說明 |
SBM_ENABLE_ARROWS | ESB_DISABLE_BOTH | 0 | 禁止雙向滾動剪頭 |
ESB_DISABLE_DOWN | 0 | 禁止向下滾動剪頭 | |
ESB_DISABLE_LTUP | 0 | 禁止向上和向左滾動剪頭 | |
ESB_DISABLE_LEFT | 0 | 禁止向左滾動剪頭 | |
ESB_DISABLE_RTDN | 0 | 禁止向下和向右滾動剪頭 | |
ESB_DISABLE_UP | 0 | 禁止向上滾動剪頭 | |
ESB_ENABLE_BOTH | 0 | 允許雙向滾動剪頭(撤消各種禁止) | |
SBM_SETPOS | 指定位置 | TRUE | 設置滾動框位置,并重繪控件 |
FALSE | 設置滾動框位置,不重繪控件 | ||
SBM_SETRANGE | 最小值 | 最大值 | 設置滾動框位置的變化范圍 |
SBM_SETRANGEREDRAW | 最小值 | 最大值 | 設置滾動框位置的變化范圍,并重繪控件 |
SBM_SETSCROLLINFO | TRUE或FALSE | SCROLLINFO結構指針 | 本消息通過一個SCROLLINFO結構來同時指定控件的多種參數,具體指定哪些參數由結構中的fMask成員確定。wParam指定是否重繪控件,詳見“SCROLLINFO結構” |
應用程序可以根據消息代碼做相應的操作,重新設置滾動框位置,控件本身是不會改變滾動框位置的。
消息代碼 | 動作 | 響應 |
SB_LINEUP SB_LINELEFT |
用戶點擊了向上(左)剪頭 | 滾動框位置減一,客戶窗口向上(左)滾動一行。 注:這兩個代碼數值相等,因此可以混用,下同。 |
SB_LINEDOWN SB_LINERIGHT |
用戶點擊了向下(右)剪頭 | 滾動框位置加一,客戶窗口向下(右)滾動一行。 |
SB_PAGEUP SB_PAGELEFT |
用戶點擊了滾動框以上(左)剪桿 | 滾動框位置減去一個大單位,客戶窗口向上(左)滾動一頁。 |
SB_PAGEDOWN SB_PAGERIGHT |
用戶點擊了滾動框以下(右)剪桿 | 滾動框位置加上一個大單位,客戶窗口向下(右)滾動一頁。 |
SB_THUMBPOSITION | 用戶拖動并釋放滾動框到指定位置 | 設定滾動框到指定位置。客戶窗口滾動到指定位置。 |
SB_THUMBTRACK | 用戶正在拖動滾動框 | 設定滾動框到指定位置。客戶窗口滾動到指定位置。如果應用程序需要快速瀏覽窗口,可以響應本消息重繪窗口,如果不需要快速瀏覽,可以等待收到SB_THUMBPOSITION消息時重繪窗口。 |
SB_ENDSCROLL | 用戶釋放按下剪頭或剪桿的鼠標 | 無須做任何響應 |
uMsg | wParam | lParam | 說明 |
SBM_GETPOS | 0 | 0 | 返回滾動框當前位置。 |
SBM_GETRANGE | 最小值地址指針 | 最大值地址指針 | 在指定地址中填入32位的滾動框位置的變化范圍 |
SBM_GETSCROLLINFO | 0 | SCROLLINFO結構指針 | 在一個SCROLLINFO結構中返回控件的多種參數,必須事先設定結構的fMask成員來確定具體要取得哪些參數。詳見“SCROLLINFO結構” |
SCROLLINFO結構:
SCROLLINFO STRUCT cbSize DWORD ? fMask DWORD ? nMin DWORD ? nMax DWORD ? nPage DWORD ? nPos DWORD ? nTrackPos DWORD ? SCROLLINFO ENDS |
cbSize: SCROLLINFO結構長度字節數,該值在設置和查詢參數時都必須填寫。
fMask: 指定結構中的哪些成員是有效,該值共有如下5種選擇,可以選擇多種用“OR”組合起來,該值在設置和查詢參數時都必須填寫。
SIF_ALL :整個結構都有效
SIF_DISABLENOSCROLL:該值僅在設定參數時使用,視控件參數設定的需要來對本結構的成員進行取舍。
SIF_PAGE :nPage成員有效
SIF_POS :nPos成員有效
SIF_RANGE :nMin和nMax成員有效
nMin:滾動范圍最小值
nMax:滾動范圍最大值
nPage:頁尺寸,用來確定比例滾動框的大小
nPos:滾動框的位置
nTrackPos:拖動時滾動框的位置,該參數只能查詢,不能設置。