共用方式為


狀態列 (Windows 控制件)

狀態列是父視窗底部的水平視窗,其中應用程式可以顯示各種狀態資訊。 狀態列可以分成多個部分,以顯示一種以上的信息類型。 下列螢幕快照顯示 Microsoft Windows 小畫家 應用程式中的狀態列。 在此情況下,狀態列包含「如需說明,請單擊 [說明] 功能表上的 [說明主題] 文字。 狀態列是視窗底部的區域,其中包含說明文字和座標資訊。

screen shot of the paint application, with a status bar that contains hints about online help

本節包含下列主題。

類型和樣式

狀態列的預設位置是沿著父視窗底部,但您可以指定 CCS_TOP 樣式使其出現在父視窗工作區頂端。

您可以指定 SBARS_SIZEGRIP 樣式,以在狀態列右端包含重設大小夾。

注意

不建議合併CCS_TOPSBARS_SIZEGRIP樣式,因為產生的重設大小夾無法運作。

 

大小和高度

狀態列的視窗程式會自動設定視窗的初始大小和位置,忽略 CreateWindowEx 函式中指定的值。 這個寬度與父視窗工作區的寬度相同。 高度是根據目前在狀態列的裝置內容中選取的字型計量,以及視窗框線的寬度。

每當收到 WM_SIZE 訊息時,視窗程式會自動調整狀態列的大小。 一般而言,當父視窗的大小變更時,父視窗會將WM_SIZE訊息傳送至狀態列。

應用程式可以藉由傳送視窗SB_SETMINHEIGHT訊息,以像素為單位指定最小高度,以設定狀態列繪圖區域的最小高度。 繪圖區域不包括視窗框線。 最小高度適用於在擁有者繪製狀態列中繪製。 如需詳細資訊,請參閱 本章稍後的擁有者繪製狀態列

您可以傳送視窗SB_GETBORDERS訊息,以擷取狀態欄框線的寬度。 訊息包含接收寬度之三個元素數位的位址。

多部分狀態列

狀態列可以有許多不同的部分,每個部分都顯示不同的文字行。 您可以將狀態列分割成元件,方法是傳送視窗SB_SETPARTS訊息,並指定要建立的元件數目和整數數位的位址。 數位包含每個部分的一個專案,而每個元素會指定元件右邊緣的用戶端座標。

狀態列最多可以有 256 個元件,雖然應用程式通常使用比這少得多。 您可以藉由傳送視窗一則 SB_GETPARTS 訊息,擷取狀態列中的元件計數,以及每個元件右邊緣的座標。

狀態列文字作業

您可以藉由傳送 SB_SETTEXT 訊息、指定元件之以零起始的索引、要繪製元件之字串的位址,以及繪製字串的技術,來設定狀態列的任何部分文字。 繪圖技術會決定文字是否有框線,如果文字有框線,則為框線的樣式。 它也會決定父視窗是否負責繪製文字。 如需詳細資訊,請參閱 下方的擁有者繪製狀態列 一節。

根據預設,文字會靠左對齊狀態列的指定部分。 您可以將製表元 (\ t) 內嵌在文字中置中或靠右對齊。 單一製表元右邊的文字會置中,而第二個製表元右邊的文字則靠右對齊。

若要從狀態列擷取文字,請使用 SB_GETTEXTLENGTHSB_GETTEXT 訊息。

如果您的應用程式使用只有一個部分的狀態列,您可以使用 WM_SETTEXTWM_GETTEXTWM_GETTEXTLENGTH 訊息來執行文字作業。 這些訊息只會處理索引為零的部分,讓您將狀態列視為靜態文字控件。

若要在不建立狀態列的情況下顯示狀態行,請使用 DrawStatusText 函式。 函式會使用相同的技術來繪製狀態為狀態列的視窗程式,但不會自動設定狀態資訊的大小和位置。 呼叫函式時,您必須指定狀態資訊的大小和位置,以及要在其中繪製之視窗的裝置內容。

擁有者繪製狀態列

您可以定義狀態列的個別元件,以成為擁有者繪製的元件。 使用這項技術可提供您比對視窗元件外觀更多的控制權。 例如,您可以使用不同的字型來顯示點陣圖,而不是文字或繪製文字。

若要將視窗元件定義為擁有者繪製,請將SB_SETTEXT訊息傳送至狀態列,並指定元件和SBT_OWNERDRAW繪圖技術。 指定SBT_OWNERDRAW時,lParam 參數是一個 32 位的應用程式定義值,應用程式可在繪製元件時使用。 例如,您可以指定字型句柄、點陣圖句柄、字串位址等等。

當狀態列需要繪製擁有者繪製元件時,它會將 WM_DRAWITEM 訊息傳送至父視窗。 訊息的 wParam 參數是狀態列的子視窗識別碼,而 lParam 參數是 DRAWITEMSTRUCT 結構的位址。 父視窗會使用 結構中的資訊來繪製元件。 對於狀態列的擁有者繪製部分, DRAWITEMSTRUCT 包含下列資訊。

member 描述
CtlType 定義;請勿使用 。
CtlID 狀態列的子視窗識別碼。
itemID 要繪製之元件之以零起始的索引。
itemAction 定義;請勿使用 。
itemState 定義;請勿使用 。
hwndItem 狀態列的句柄。
hDC 處理狀態列的裝置內容。
rcItem 要繪製之視窗部分的座標。 座標相對於狀態列左上角。
itemData 應用程式定義的32位值,指定於SB_SETTEXT訊息的 lParam 參數中。

 

簡單模式狀態列

您可以傳送SB_SIMPLE訊息,讓狀態列處於「簡單模式」。 簡單模式狀態列只會顯示一個部分。 設定視窗的文字時,視窗會失效,但直到下一個 WM_PAINT才會重新繪製。 等候訊息會藉由將視窗重新繪製的次數降至最低,以減少螢幕閃爍。 當使用者捲動功能表時,簡單的模式狀態列可用於顯示功能表項的說明文字。

狀態列在簡單模式中顯示的字串會與在非簡單模式中顯示時所顯示的字串分開維護。 這表示您可以將視窗置於簡單模式中、設定其文字,並切換回非簡單模式,而不需要變更非簡單模式文字。

設定簡單模式狀態列的文字時,除了SBT_OWNERDRAW之外,您可以指定任何繪圖技術。 簡單模式狀態列不支持擁有者繪圖。

默認狀態列訊息處理

本節描述預先定義 STATUSCLASSNAME 類別之視窗程式所處理的訊息。

訊息 默認處理
WM_CREATE 初始化狀態列。
WM_DESTROY 釋放配置給狀態列的資源。
WM_GETFONT 傳回目前字型的句柄,狀態列會用來繪製其文字。
WM_GETTEXT 將狀態列第一個部分的文字複製到緩衝區。 它會傳回 32 位值,指定文字的長度,以字元為單位,以及用來繪製文字的技術。
WM_GETTEXTLENGTH 傳回 32 位值,指定狀態列第一部分中文字的長度,以字元為單位,以及用來繪製文字的技術。
WM_NCHITTEST 如果滑鼠游標位於重設大小夾中,則會傳回HTBOTTOMRIGHT值,導致系統顯示重設大小游標。 如果滑鼠游標不在重設大小夾中,狀態列會將此訊息傳遞至 DefWindowProc 函式。
WM_PAINT 小畫家 狀態列的無效區域。 如果 wParam 參數不是 NULL,控制項會假設此值為 HDC,並使用該裝置內容繪製。
WM_SETFONT 選取狀態列的裝置內容中的字型句柄。
WM_SETTEXT 使用預設繪圖作業,將指定的文字複製到狀態列的第一個部分(指定為零)。 如果成功,則會傳回 TRUE否則傳回 FALSE
WM_SIZE 根據父視窗工作區的目前寬度和狀態列目前字型的高度,調整狀態列的大小。