共用方式為


關於向上的控件

向下控件是一對箭頭按鈕,使用者可以按兩下以遞增或遞減值,例如滾動位置或隨附控件中顯示的數位(稱為朋友視窗)。

對使用者,向上控件及其夥伴視窗通常看起來像單一控件。 您可以指定向上控件會自動將本身放置在其夥伴視窗旁邊,而且它會自動將夥伴視窗的 標題 設定為其目前位置。 例如,您可以使用向上鍵控件與編輯控制件,提示使用者輸入數值。 下圖顯示具有編輯控件做為其夥伴視窗的上下控件,這種組合有時稱為微調控件。

screen shot showing a short, wide rectangular control with up and down arrows at the right edge

本節將討論下列主題。

上下控件樣式

使用視窗樣式,您可以操作向上鍵控制件的特性,例如它如何相對於其夥伴視窗定位本身、是否設定其夥伴視窗的文字,以及它是否處理向上鍵和向下箭頭鍵。

具有UDS_ALIGNLEFTUDS_ALIGNRIGHT樣式的上下控件會與其夥伴視窗的左邊緣或右邊緣對齊。 夥伴視窗的寬度會減少,以容納上下控件的寬度。

具有UDS_SETBUDDYINT樣式的上下控件會在目前位置變更時,設定其夥伴視窗的 標題。 除非指定UDS_NOTHOUSANDS樣式,否則控件會在小數點字串的每三位數之間插入千位分隔符。 如果朋友視窗是清單框,則向上控件會設定其目前的選取範圍,而不是其 標題。

您可以指定 UDS_ARROWKEYS 樣式,以提供上下控制件的鍵盤介面。 如果指定此樣式,控件會處理向上鍵和向下鍵。 控件也會子類別化 Buddy 視窗,以便在夥伴視窗具有焦點時處理這些索引鍵。

如果您使用向上卷動控件進行水平捲動,您可以指定 UDS_HORZ 樣式。 此樣式會使上下控件的箭號指向左右,而不是向上和向下。

根據預設,如果用戶嘗試遞增或遞減超過最大值或最小值,則目前的位置不會變更。 您可以使用UDS_WRAP樣式來變更此行為,讓位置「換行」到相反的極端。 例如,遞增超過上限會將位置換回下限。

位置和加速

建立上下控件之後,您可以藉由傳送訊息來變更控件的目前位置、最小位置和最大位置。 您也可以變更用來在朋友視窗中顯示目前位置的基底,以及按下向上或向下箭號時,目前位置變更的速率。

若要擷取上下控制件的目前位置,請使用 UDM_GETPOS 訊息。 對於具有夥伴視窗的上下控件,目前的位置是夥伴視窗 標題 中的數位。 因為 標題 可能已經變更(例如,使用者可能編輯了編輯控件的文字),所以向上鍵會擷取目前的 標題,並據以更新其目前的位置。

夥伴視窗的 標題 可能是十進位或十六進位字串,視向上控件的基底 (也就是基底 10 或 16) 而定。 您可以使用 UDM_SETBASE 訊息來設定基底,並使用 UDM_GETBASE 訊息來擷取基底。

UDM_SETPOS訊息會設定朋友視窗的目前位置。 請注意,與滾動條不同,按兩下向上和向下箭號時,向上和向下控件會自動變更其目前的位置。 因此,處理WM_VSCROLLWM_HSCROLL訊息時,應用程式不需要設定目前的位置。

您可以使用UDM_SETRANGE訊息來變更上下控制件的最小和最大位置。 最大位置可能小於最小值,在此情況下,按下向上箭號按鈕會減少目前的位置。 以另一種方式說,向上表示向最大位置移動。 若要擷取上下控件的最小和最大位置,請使用 UDM_GETRANGE 訊息。

您可以藉由設定上下控制元件的加速,控制使用者按住箭頭按鈕時的位置變更速率。 加速是由 UDACCEL 結構的數位所定義。 每個結構都會指定要在該間隔結尾遞增或遞減的時間間隔和單位數目。 若要設定加速,請使用 UDM_SETACCEL 訊息。 若要擷取加速資訊,請使用 UDM_GETACCEL 訊息。

預設向上控制訊息處理

本節說明由向上控件處理的標準 Windows 訊息。

訊息 已執行處理
WM_CREATE 配置並初始化私人數據結構,並將其位址儲存為窗口數據。
WM_DESTROY 釋放WM_CREATE處理期間配置的數據。
WM_ENABLE 使視窗失效。
WM_KEYDOWN 變更向上鍵或向下鍵的目前位置。
WM_KEYUP 完成位置變更。
WM_LBUTTONDOWN 擷取滑鼠。 如果 Buddy 視窗是編輯控制項或清單框,則會將焦點設定為 Buddy 視窗。 如果滑鼠位於向上或向下按鈕上方,就會開始變更位置並設定定時器。
WM_LBUTTONUP 如果向上鍵控件已擷取滑鼠,則完成位置變更並釋放滑鼠擷取。 如果朋友視窗是編輯控件,則會選取編輯控件中的所有文字。
WM_PAINT 小畫家 向上控件。 如果 wParam 參數不是 NULL,控制項會假設此值為 HDC,並使用該裝置內容繪製。
WM_TIMER 如果滑鼠停留在按鈕上,且已經過足夠的間隔,則變更目前的位置。