按鈕狀態

本節討論如何選取按鈕變更其狀態,以及應用程式應該如何回應。

本節包含下列主題:

按鈕選取

使用者可以以三種方式選取按鈕:使用滑鼠按鍵、按 TAB 鍵,然後按 ENTER 鍵,或(如果按鈕是WS_GROUP樣式所定義的群組的一部分),方法是將索引卷標移至群組中選取的按鈕,並使用箭頭鍵在該群組內移動。 這兩個Tabbing方法是系統所提供的預先定義鍵盤介面的一部分。 如需此介面的完整描述,請參閱 對話方塊

選取按鈕通常會導致下列事件:

  • 系統會提供鍵盤焦點的按鈕。
  • 按鈕會傳送其父視窗訊息,以通知其選取範圍。
  • 父視窗 (或系統) 會傳送訊息來變更其狀態的按鈕。
  • 父視窗 (或系統) 會重新繪出按鈕,以反映其新狀態。

按鈕狀態的專案

按鈕的狀態可以以其焦點狀態、推送狀態和檢查狀態來描述。

焦點狀態

焦點狀態適用於複選框、單選按鈕、按鈕或擁有者繪製按鈕。 當使用者選取鍵盤焦點時,按鈕會收到鍵盤焦點,當用戶選取另一個控件時失去焦點。 一次只能有一個控件的鍵盤焦點。

當按鈕具有鍵盤焦點時,系統通常會以虛線圍繞按鈕來反白顯示按鈕的文字、圖示或點陣陣圖。 此外,當按鈕具有焦點時,按鈕有一個沉重的深色框線。 系統會自動變更自動按鈕的醒目提示,但應用程式必須藉由傳送訊息來變更非自動按鈕的醒目提示。

推送狀態

推送狀態會套用至按鈕、複選框、單選按鈕或三狀態複選框,但不適用於其他按鈕。 按鈕的推送狀態可以推送或無法推送。 按下按鈕(或任何具有 BS_PUSHLIKE 樣式的按鈕時,按鈕會繪製為下沉按鈕。 未按下時,會繪製為引發的按鈕。 按兩下複選框、單選按鈕或三狀態複選框時,按鈕的背景會呈現灰色。 未按下時,按鈕的背景不會呈現灰色。

檢查狀態

核取狀態適用於複選框、單選按鈕或三狀態複選框,但不適用於其他按鈕。 狀態可以核取、清除或(針對三個狀態複選框)不確定。 複選框在包含複選標記時會核取,並在未核取時清除。 包含黑點時,會檢查單選按鈕;當它沒有時,它就會被清除。 當包含複選標記時,會核取三狀態複選框、當它沒有時清除,而且在包含灰色方塊時會不確定。 系統會自動變更自動按鈕的檢查狀態,但應用程式必須變更非自動按鈕的檢查狀態。

按鈕狀態的變更

當使用者選取按鈕時,通常需要變更按鈕的一或多個狀態元素。 系統會自動變更所有按鈕類型的焦點狀態、具有BS_PUSHLIKE樣式的按鈕或按鈕的推播狀態,以及所有自動按鈕的檢查狀態。 應用程式必須進行所有其他狀態變更,並考慮按鈕的類型、樣式和目前狀態。 下列清單顯示每個按鈕類型必須變更的狀態元素:

  • 複選框必須變更檢查狀態。
  • 單選按鈕必須變更檢查狀態。 您也可以變更相同群組中其他單選按鈕的檢查狀態,以確保單選按鈕的互斥本質。
  • 由於擁有者繪製按鈕的狀態取決於應用程式,因此應用程式在按鈕中必須變更的內容可能會有所不同。 無法變更群組方塊的專案,因為使用者無法選取群組方塊。

應用程式可以藉由傳送BM_GETCHECKBM_GETSTATE訊息來判斷按鈕的狀態;應用程式可以藉由傳送BM_SETCHECKBM_SETSTATE訊息來設定按鈕的狀態。