滾動(dòng)控件(ScrollBar)
滾動(dòng)條(ScrollBar)主要用來從某一預(yù)定義值范圍內(nèi)快速有效地進(jìn)行選擇。滾動(dòng)條分垂直滾動(dòng)條和水平滾動(dòng)條兩種。在滾動(dòng)條內(nèi)有一個(gè)滾動(dòng)框,用來表示當(dāng)前的值。用鼠標(biāo)單擊滾動(dòng)條,可以使?jié)L動(dòng)框移動(dòng)一頁,鼠標(biāo)單擊滾動(dòng)條兩端的剪頭可以使?jié)L動(dòng)框移動(dòng)一行,也可以直接拖動(dòng)滾動(dòng)框。許多窗口控件如列表框和組合框等都帶有滾動(dòng)條子窗口。Win32的滾動(dòng)條支持比例滾動(dòng)框,即用滾動(dòng)框的大小來反映頁相對(duì)于整個(gè)范圍的大小。
當(dāng)CreateWindowEx創(chuàng)建滾動(dòng)條時(shí),其風(fēng)格常數(shù)中帶SBS_VERT為水平滾動(dòng)條,不帶SBS_VERT或帶SBS_HORZ為垂直滾動(dòng)條。
創(chuàng)建控件時(shí)應(yīng)初始化滾動(dòng)條的各種參數(shù)。
應(yīng)用程序可以通過調(diào)用SendMessage向控件發(fā)送如下消息來設(shè)定控件各種參數(shù)。
uMsg |
wParam |
lParam |
說明 |
SBM_ENABLE_ARROWS |
ESB_DISABLE_BOTH |
0 |
禁止雙向滾動(dòng)剪頭 |
ESB_DISABLE_DOWN |
0 |
禁止向下滾動(dòng)剪頭 |
ESB_DISABLE_LTUP |
0 |
禁止向上和向左滾動(dòng)剪頭 |
ESB_DISABLE_LEFT |
0 |
禁止向左滾動(dòng)剪頭 |
ESB_DISABLE_RTDN |
0 |
禁止向下和向右滾動(dòng)剪頭 |
ESB_DISABLE_UP |
0 |
禁止向上滾動(dòng)剪頭 |
ESB_ENABLE_BOTH |
0 |
允許雙向滾動(dòng)剪頭(撤消各種禁止) |
SBM_SETPOS |
指定位置 |
TRUE |
設(shè)置滾動(dòng)框位置,并重繪控件 |
FALSE |
設(shè)置滾動(dòng)框位置,不重繪控件 |
SBM_SETRANGE |
最小值 |
最大值 |
設(shè)置滾動(dòng)框位置的變化范圍 |
SBM_SETRANGEREDRAW |
最小值 |
最大值 |
設(shè)置滾動(dòng)框位置的變化范圍,并重繪控件 |
SBM_SETSCROLLINFO |
TRUE或FALSE |
SCROLLINFO結(jié)構(gòu)指針 |
本消息通過一個(gè)SCROLLINFO結(jié)構(gòu)來同時(shí)指定控件的多種參數(shù),具體指定哪些參數(shù)由結(jié)構(gòu)中的fMask成員確定。wParam指定是否重繪控件,詳見“SCROLLINFO結(jié)構(gòu)” |
當(dāng)用戶在滾動(dòng)條控件上進(jìn)行各種操作時(shí),其父窗口將收到WM_HSCROLL或WM_VSCROLL通知消息,同時(shí)wParam的低16位帶有如下表的消息代碼(nScrollCode),wParam的高16位帶滾動(dòng)框的指定位置(nPos),該值在消息代碼等于SB_THUMBPOSITION或SB_THUMBTRACK時(shí)才有效。lParam帶控件句柄(hwndScrollBar)。
應(yīng)用程序可以根據(jù)消息代碼做相應(yīng)的操作,重新設(shè)置滾動(dòng)框位置,控件本身是不會(huì)改變滾動(dòng)框位置的。
消息代碼 |
動(dòng)作 |
響應(yīng) |
SB_LINEUP SB_LINELEFT |
用戶點(diǎn)擊了向上(左)剪頭 |
滾動(dòng)框位置減一,客戶窗口向上(左)滾動(dòng)一行。 注:這兩個(gè)代碼數(shù)值相等,因此可以混用,下同。 |
SB_LINEDOWN SB_LINERIGHT |
用戶點(diǎn)擊了向下(右)剪頭 |
滾動(dòng)框位置加一,客戶窗口向下(右)滾動(dòng)一行。 |
SB_PAGEUP SB_PAGELEFT |
用戶點(diǎn)擊了滾動(dòng)框以上(左)剪桿 |
滾動(dòng)框位置減去一個(gè)大單位,客戶窗口向上(左)滾動(dòng)一頁。 |
SB_PAGEDOWN SB_PAGERIGHT |
用戶點(diǎn)擊了滾動(dòng)框以下(右)剪桿 |
滾動(dòng)框位置加上一個(gè)大單位,客戶窗口向下(右)滾動(dòng)一頁。 |
SB_THUMBPOSITION |
用戶拖動(dòng)并釋放滾動(dòng)框到指定位置 |
設(shè)定滾動(dòng)框到指定位置。客戶窗口滾動(dòng)到指定位置。 |
SB_THUMBTRACK |
用戶正在拖動(dòng)滾動(dòng)框 |
設(shè)定滾動(dòng)框到指定位置??蛻舸翱跐L動(dòng)到指定位置。如果應(yīng)用程序需要快速瀏覽窗口,可以響應(yīng)本消息重繪窗口,如果不需要快速瀏覽,可以等待收到SB_THUMBPOSITION消息時(shí)重繪窗口。 |
SB_ENDSCROLL |
用戶釋放按下剪頭或剪桿的鼠標(biāo) |
無須做任何響應(yīng) |
應(yīng)用程序可以通過調(diào)用SendMessage向控件發(fā)送如下消息來取得當(dāng)前控件各種參數(shù)。
uMsg |
wParam |
lParam |
說明 |
SBM_GETPOS |
0 |
0 |
返回滾動(dòng)框當(dāng)前位置。 |
SBM_GETRANGE |
最小值地址指針 |
最大值地址指針 |
在指定地址中填入32位的滾動(dòng)框位置的變化范圍 |
SBM_GETSCROLLINFO |
0 |
SCROLLINFO結(jié)構(gòu)指針 |
在一個(gè)SCROLLINFO結(jié)構(gòu)中返回控件的多種參數(shù),必須事先設(shè)定結(jié)構(gòu)的fMask成員來確定具體要取得哪些參數(shù)。詳見“SCROLLINFO結(jié)構(gòu)” |
當(dāng)控件需要重畫時(shí)向每父窗口發(fā)送WM_CTLCOLORSCROLLBAR消息,同時(shí)在wParam中帶控件的設(shè)備場景句柄(hDC),lParam中帶控件句柄。如果應(yīng)用程序響應(yīng)這個(gè)消息并返回一個(gè)畫刷(brush)句柄,控件將根據(jù)這個(gè)句柄繪制背景色。
SCROLLINFO結(jié)構(gòu):
SCROLLINFO STRUCT
cbSize DWORD ?
fMask DWORD ?
nMin DWORD ?
nMax DWORD ?
nPage DWORD ?
nPos DWORD ?
nTrackPos DWORD ?
SCROLLINFO ENDS
|
成員說明:
cbSize: SCROLLINFO結(jié)構(gòu)長度字節(jié)數(shù),該值在設(shè)置和查詢參數(shù)時(shí)都必須填寫。
fMask: 指定結(jié)構(gòu)中的哪些成員是有效,該值共有如下5種選擇,可以選擇多種用“OR”組合起來,該值在設(shè)置和查詢參數(shù)時(shí)都必須填寫。
SIF_ALL :整個(gè)結(jié)構(gòu)都有效
SIF_DISABLENOSCROLL:該值僅在設(shè)定參數(shù)時(shí)使用,視控件參數(shù)設(shè)定的需要來對(duì)本結(jié)構(gòu)的成員進(jìn)行取舍。
SIF_PAGE :nPage成員有效
SIF_POS :nPos成員有效
SIF_RANGE :nMin和nMax成員有效
nMin:滾動(dòng)范圍最小值
nMax:滾動(dòng)范圍最大值
nPage:頁尺寸,用來確定比例滾動(dòng)框的大小
nPos:滾動(dòng)框的位置
nTrackPos:拖動(dòng)時(shí)滾動(dòng)框的位置,該參數(shù)只能查詢,不能設(shè)置。
posted on 2008-07-21 09:57
幽幽 閱讀(1769)
評(píng)論(3) 編輯 收藏 引用 所屬分類:
Windows