共用方式為


關於滑動條控件

追蹤列是一個視窗,其中包含通道中的滑桿(有時稱為拇指),以及選擇性的刻度標記。 當用戶移動滑桿時,使用滑鼠或方向鍵,追蹤列會傳送通知訊息來指出變更。

當您想要用戶選取離散不帶正負號的整數值或範圍內的一組連續不帶正負號整數值時,追蹤列會很有用。 例如,您可以使用追蹤列讓使用者將滑桿移至指定的刻度,以設定鍵盤的重複速率。 下圖顯示一個典型的滑桿。

顯示有標示慢速和快速的拉條螢幕截圖

追蹤列中的滑桿會以您建立時指定的遞增移動。 此範圍中的值稱為邏輯單元。 例如,如果您指定追蹤列應該有範圍從 0 到 5 的邏輯單元,滑桿只能佔用六個位置:在追蹤列左邊的位置,而該範圍中每個遞增的位置各一個位置。 一般而言,每個位置都是由刻度標記來識別;不過,刻度標記的數目是任意的,而且可能小於邏輯位置的數目。

您可以使用 CreateWindowEx 函式來建立追蹤列,並指定 TRACKBAR_CLASS 視窗類別。 建立追蹤列之後,您可以使用追蹤列訊息來設定和擷取其許多屬性。 您可以進行的變更包括設定滑桿的最小和最大位置、繪製刻度、設定選取範圍,以及重新置放滑桿。

選取範圍

如果您使用 TBS_ENABLESELRANGE 樣式建立追蹤列,則可以指定選取範圍。 滑桿會反白顯示選取範圍,並在開始和結束處顯示三角形刻度,如下圖所示。

滑桿的 螢幕快照,其中已醒目顯示範圍

追蹤列的選取範圍不會以任何方式影響其功能。 實作範圍由應用程式決定。 您可以使用下列其中一種方式來執行此動作:

  • 使用選取範圍可讓用戶設定某些參數的最大值和最小值。 例如,使用者可以將滑桿移至某個位置,然後按下標示為 “Max” 的按鈕。 然後,應用程式會設定選取範圍,以顯示用戶選擇的值。
  • 藉由處理 WM_HSCROLLWM_VSCROLL 通知,並不允許選取範圍以外的任何移動,將滑桿的移動限制為控件內預先決定的子範圍。 例如,如果使用者可用的值範圍可能會因為使用者所做的其他選擇或根據可用的資源而變更,您可能會這麼做。

軌跡條訊息

追蹤列的邏輯單位是追蹤列可以表示的連續值集合。 一旦建立追蹤列,通常使用 TBM_SETRANGE 訊息來定義其可能值的範圍。 應用程式可以使用 TBM_SETRANGETBM_SETRANGEMAXTBM_SETRANGEMIN動態改變範圍。

若要擷取滑桿的位置(也就是使用者已選擇的值),請使用 TBM_GETPOS 訊息。 若要設定滑桿的位置,請使用 TBM_SETPOS 訊息。

若未指定 TBS_NOTICKS 樣式,追蹤列會自動在其開頭和結尾顯示刻度標記。 (在 Microsoft Visual Studio 資源編輯器中,這表示將 Tick Marks 屬性設定為 False。您可以使用 TBS_AUTOTICKS 樣式,在追蹤列上定期自動顯示其他刻度標記。 根據預設,TBS_AUTOTICKS 追蹤列會在追蹤列範圍的每個增量上顯示刻度標記。 若要指定自動刻度標記的不同間隔,請將 TBM_SETTICFREQ 訊息傳送至追蹤列。 例如,您可以使用此訊息,只顯示介於1到100範圍內的10個刻度。

若要設定單一刻度標記的位置,請傳送 TBM_SETTIC 訊息。 追蹤列會保存 DWORD 值的陣列,以儲存每個刻度標記的位置。 陣列不包含追蹤列自動建立的第一個和最後一個刻度標記。 當您傳送 TBM_GETTIC 訊息以擷取對應刻度的位置時,您可以在此陣列中指定索引。 或者,您可以傳送 TBM_GETPTICS 訊息來擷取陣列的指標。 陣列中的元素數目等於 TBM_GETNUMTICS 訊息所傳回的刻度計數少了兩個。 這是因為 TBM_GETNUMTICS 傳回的計數包含第一個和最後一個刻度標記,而這些標記並未包含在陣列中。 若要取得刻度標記的實體位置,請在追蹤列視窗的用戶端座標中傳送 TBM_GETTICPOS 訊息。 TBM_CLEARTICS 訊息會移除追蹤列的所有刻度標記,除了第一個和最後一個。

軌跡條的移動步幅決定了滑桿在響應箭頭按鍵輸入時的移動距離,例如向右箭頭或向下箭頭。 若要擷取或設定行大小,請傳送 TBM_GETLINESIZETBM_SETLINESIZE 訊息。 當使用者按下箭頭鍵時,追蹤列也會將TB_LINEUP和TB_LINEDOWN通知碼傳送至其父視窗。

追蹤列的頁面大小會決定滑桿在響應鍵盤輸入時移動的距離,例如PAGE UP或PAGE DOWN鍵,或滑鼠輸入,例如追蹤列通道中的點選。 若要擷取或設定頁面大小,請傳送 TBM_GETPAGESIZETBM_SETPAGESIZE 訊息。 當接收以鍵盤或滑鼠進行頁面捲動的輸入時,軌道條也會將 TB_PAGEUP 和 TB_PAGEDOWN 通知代碼傳送至其父視窗。 如需詳細資訊,請參閱 追蹤列通知訊息

應用程式可以傳送訊息來擷取追蹤列的維度。 TBM_GETTHUMBRECT 訊息會擷取滑桿的邊界矩形。 TBM_GETTHUMBLENGTH 訊息會擷取滑桿的長度。 TBM_GETCHANNELRECT 訊息會擷取追蹤列通道的周框,也就是滑桿移動所在的區域。 它包含選取範圍時的醒目提示。 如果追蹤列具有 TBS_FIXEDLENGTH 樣式,您可以傳送 TBM_SETTHUMBLENGTH 訊息來變更滑桿的長度。

您可以藉由將訊息傳送至追蹤列來擷取或設定選取範圍。 使用 TBM_SETSEL 訊息來設定選取範圍的開始和結束位置。 若要只設定開始位置或只設定選取範圍的結束位置,請傳送 TBM_SETSELSTARTTBM_SETSELEND 訊息。 若要擷取選取範圍的開始或結束位置,請傳送 TBM_GETSELSTARTTBM_GETSELEND 訊息。 若要清除選取範圍,並將追蹤列還原為其原始範圍,請傳送 TBM_CLEARSEL 訊息。

注意

應用程式有責任確保使用者無法選取選取範圍以外的值。 控件本身不會防止用戶移動滑桿超出範圍。

 

軌跡條通知訊息

追蹤列會傳送 WM_HSCROLLWM_VSCROLL 訊息,以通知父窗口使用者的操作。 具有 TBS_HORZ 樣式的追蹤列會傳送 WM_HSCROLL 訊息。 具有 TBS_VERT 樣式的滑桿會傳送 WM_VSCROLL 訊息。 wParam 參數的低序字組,WM_HSCROLLWM_VSCROLL,包含通知代碼。 針對TB_THUMBPOSITION和TB_THUMBTRACK通知代碼,wParam 參數的高階字會指定滑桿的位置。 對於所有其他通知碼,高序字為零;傳送 TBM_GETPOS 訊息來判斷滑桿位置。 lParam 參數是滑桿的控制代碼。

只有當使用者使用鍵盤與追蹤欄互動時,系統才會傳送TB_BOTTOM、TB_LINEDOWN、TB_LINEUP和TB_TOP通知碼。 只有在使用者使用滑鼠時,才會傳送TB_THUMBPOSITION和TB_THUMBTRACK通知碼。 這兩種情況都會傳送TB_ENDTRACK、TB_PAGEDOWN和TB_PAGEUP通知碼。 下表列出追蹤列通知碼和導致傳送 Virtual-Key 代碼通知的事件(虛擬索引鍵碼或滑鼠事件)。

通知代碼 已傳送的原因
TB_BOTTOM VK_END
TB_ENDTRACK WM_KEYUP (使用者釋放了傳送相關虛擬金鑰碼的金鑰 )
TB_LINEDOWN VK_RIGHTVK_DOWN
TB_LINEUP VK_LEFTVK_UP
TB_PAGEDOWN VK_NEXT (使用者按下下方或滑杆右側的頻道)
TB_PAGEUP VK_PRIOR (使用者點擊滑桿上方或左側的通道)
TB_THUMBPOSITION 遵循TB_THUMBTRACK通知程式代碼 WM_LBUTTONUP
TB_THUMBTRACK 滑桿移動 (使用者拖曳滑桿)
TB_TOP VK_HOME

 

預設滑桿訊息處理

本節描述追蹤列所執行的視窗訊息處理。

消息 處理已完成
WM_CAPTURECHANGED 如果在 WM_LBUTTONDOWN 處理期間已設定定時器,則會終止該定時器;並且視需要傳送 TB_THUMBPOSITION 通知碼。 它一律會傳送TB_ENDTRACK通知碼。
WM_CREATE 執行其他初始化,例如將行號、頁面大小和刻度標記頻率設定為預設值。
WM_DESTROY 釋放資源。
WM_ENABLE 重新繪出追蹤列視窗。
WM_ERASEBKGND 使用追蹤列的目前背景色彩,清除視窗背景。
WM_GETDLGCODE 傳回DLGC_WANTARROWS值。
WM_KEYDOWN 處理方向鍵,並視需要傳送TB_TOP、TB_BOTTOM、TB_PAGEUP、TB_PAGEDOWN、TB_LINEUP和TB_LINEDOWN通知碼。
WM_KEYUP 如果金鑰是其中一個方向鍵,則傳送TB_ENDTRACK通知碼。
WM_KILLFOCUS 重新繪出追蹤列視窗。
WM_LBUTTONDOWN 將焦點和滑鼠擷取設置到滑動條。 必要時,它會設定定時器,決定當使用者按住視窗的滑鼠按鈕時,滑桿向滑鼠游標移動的速度。
WM_LBUTTONUP WM_LBUTTONDOWN 處理過程中,釋放滑鼠擷取,如果設定了定時器,則予以終止。 如有必要,它會傳送TB_THUMBPOSITION通知碼。 它一律會傳送TB_ENDTRACK通知碼。
WM_MOUSEMOVE 移動滑桿,並在追蹤滑鼠時傳送TB_THUMBTRACK通知碼(請參閱 WM_TIMER)。
WM_PAINT 繪製追蹤列。 如果 wParam 參數不是 NULL,控制項會假設此值為 HDC,並使用該裝置內容繪製。
WM_SETFOCUS 重新繪出追蹤列視窗。
WM_SIZE 設定追蹤列的尺寸,如果沒有足夠的空間顯示滑桿,則移除滑桿。
WM_TIMER 擷取滑鼠位置,並更新滑桿的位置。 (只有在使用者拖曳滑桿時才會收到。
WM_WININICHANGE 初始化滑桿維度。

 

滑桿工具提示

使用 TBS_TOOLTIPS 樣式建立的追蹤列具有預設的工具提示控件。 工具提示會保持可見狀態,並在使用者使用滑鼠拖曳滑桿時顯示目前的值。

您可以透過傳送 TBM_SETTOOLTIPS 訊息,將新的工具提示控制項指派給滑桿。 若要擷取指派工具提示控件的句柄,請使用 TBM_GETTOOLTIPS 訊息。