Win32 Slider Control的用法
暮鼓集 行走集
原作於2008年03月21日
Slider Control又稱為Track Bar,它的外觀是一個滑動條(Slider)和可選的記號(Tick mark),當使用滑鼠(Mouse)或者方向鍵(Direction key)移動Slider時,這個控鍵會發出通知訊息告知位置改變。它適合於在一個離散的值或者一些連續的值中進行選擇。
MFC將其封裝為CSliderCtrl類。
1.建立一個Slider Contrl後,需要對其進行初始化。這包括:
1) 設定Slider的位置範圍
Slider的位置範圍是Slider Bar所能表示的連續值的數目。如果希望可以通過Slider Bar在數字1~5間進行選擇,那麼這個範圍就是1~5。另一個技巧是僅讓使用者在連續的值中選擇指定的幾個,如數值為1~100,但是僅允許選擇0, 20, 40, 60, 80, 100這樣幾個值,那麼這個Slider的範圍依然是1~5,而不能是1~100。
設定位置範圍是通過SetRange函式完成的。在執行時,還可以通過函式SetRangeMin和SetRangeMax來分別修改最小與最大值。
void SetRangeMin(int nMin, BOOL bRedraw = FALSE)
void SetRangeMax(int nMax, BOOL bRedraw = FALSE)
2) 設定Slider的起始位置
設定起始位置是通過函式void SetPos(int nPos)。
這也可以用於執行時改變Slider的位置。
3) 設定Tick mark
使用SetTic函式可以在指定的位置顯示一個Tick mark。更簡單的辦法是,使用SetTicFreq函式,它可以每隔指定的長度就顯示一個Tick mark。這個函式需要TBS_AUTOTICKS屬性,在資源編輯器中只要在控制元件Style屬性中的Auto Tickmark欄勾上標記即可。
Tick mark標記是確省的設定,如果不需要,在屬性中加上TBS_NOTICKS,同樣的,資源編輯器中可以簡單的變更。
2.處理Slider Contrl訊息
Slider Contrl通過向父視窗傳送WM_HSCROLL訊息來通知狀態的改變。
使用MFC時,過載了OnHScroll的一個簡單的處理過程如下。
switch( nSBCode ) { case TB_BOTTOM: // VK_END break; case TB_ENDTRACK: // WM_KEYUP break; case TB_LINEDOWN: // VK_RIGHT or VK_DOWN break; case TB_LINEUP: // VK_LEFT or VK_UP break; case TB_PAGEDOWN: // VK_NEXT break; case TB_PAGEUP: // VK_PRIOR break; case TB_THUMBPOSITION: // WM_LBUTTONUP break; case TB_THUMBTRACK: // Slider movement break; case TB_TOP: //VK_HOME break; }
3.取得Slider Control的狀態
通常我們不需要對Slider Control的訊息做處理,而只關心它的狀態表示的數值。這可以使用
int GetPos()來取得。