簡介
與按鈕控制項(以及將在後面討論的編輯和清單方塊控制項)不同,捲動列控制項不向父視窗傳送WM_COMMAND訊息,而是像視窗捲動列那樣傳送WM_VSCROLL和WM_HSCROLL訊息。在處理捲動訊息時,您可以通過lParam參數來區分視窗捲動列與捲動列控制項。對子視窗捲動列其值為0,對於捲動列控制項其值為捲動列視窗代號。對視窗捲動列和捲動列控制項來說,wParam參數的高字組和低字組的含義相同。
說明
雖然視窗捲動列有固定的寬度,Windows使用CreateWindow呼叫中(或者在後面的MoveWindow呼叫中)給定的矩形尺寸來確定捲動列控制項的尺寸。您可以建立細而長的捲動列控制項,也可以建立短而粗的捲動列控制項。
如果您想建立與視窗捲動列尺寸相同的捲動列控制項,那么可以使用GetSystemMetrics取得水平捲動列的高度:
GetSystemMetrics (SM_CYHSCROLL) ;
或者垂直捲動列的寬度:
GetSystemMetrics (SM_CXVSCROLL) ;
根據Windows檔案,捲動列窗樣式識別字SBS_LEFTALIGN、SBS_RIGHTALIGN、SBS_TOP ALIGN和SBS_BOTTOMALIGN給出捲動列的標準尺寸,但是這些樣式只在對話方塊中對捲動列有效。
對視窗捲動列,您可以使用同樣的呼叫來建立捲動列控制項的範圍和位置:
SetScrollRange (hwndScroll, SB_CTL, iMin, iMax, bRedraw) ;
SetScrollPos (hwndScroll, SB_CTL, iPos, bRedraw) ;
SetScrollInfo (hwndScroll, SB_CTL, &si, bRedraw) ;
其區別在於:視窗捲動列將父視窗的代號作為第一個參數,並且以SB_VERT或者SB_HORZ作為第二個參數。
令人吃驚的是,名為COLOR_SCROLLBAR的系統顏色不再用於捲動列。兩端的按鈕和小方塊的顏色由COLOR_BTNFACE、COLOR_BTNHILIGHT、COLOR_BTNSHADOW、COLOR_BTNTEXT (用於小箭頭)、COLOR_DKSHADOW和COLOR_BTNLIGHT決定。兩端按鈕之間區域的顏色由COLOR_BTNFACE和COLOR_BTNHIGHLIGHT決定。
如果您攔截了WM_CTLCOLORSCROLLBAR訊息,那么可以在訊息處理中傳回畫刷以取代該顏色。讓我們來試一下。