關於靜態控件

應用程式通常會使用靜態控件來標記其他控制項,或分隔一組控件。 雖然靜態控件是子視窗,但無法選取它們。 因此,它們無法接收鍵盤焦點,而且不能有鍵盤介面。 具有SS_NOTIFY樣式的靜態控件會接收滑鼠輸入,當使用者按兩下或按兩下控件時通知父視窗。 靜態控件屬於 STATIC 視窗類別。

雖然靜態控件可用於重疊、彈出視窗和子視窗,但它們是針對在對話框使用而設計的,其中系統會將其行為標準化。 藉由在對話框外部使用靜態控件,開發人員會增加應用程式可能以非標準方式運作的風險。 一般而言,開發人員會在對話框中使用靜態控件,或使用SS_OWNERDRAW樣式來建立自定義的靜態控件。

本節將討論下列主題。

靜態控件類型

靜態控件有四種類型。 每個類型都有一或多個 靜態控件樣式

簡單圖形靜態控件

簡單的圖形靜態控件會顯示框架或填滿的矩形。 框架可以繪製成數種樣式,包括黑色、灰色或白色。 此外,還可以使用刻制樣式繪製框架,以提供立體外觀。 框架樣式包括SS_BLACKFRAME、SS_GRAYFRAME、SS_WHITEFRAME、SS_ETCHEDHORZ、SS_ETCHEDVERT和SS_ETCHEDFRAME。

矩形可以填滿三種樣式之一的色彩:黑色、灰色或白色。 這些樣式是由常數SS_BLACKRECT、SS_GRAYRECT和SS_WHITERECT所定義。

無法合併圖形樣式。

文字靜態控件

文字靜態控制件會在五種樣式之一的矩形中顯示文字:

  • 靠左對齊而不換行
  • 靠左對齊自動換行
  • 置中
  • 靠右對齊
  • simple

這些樣式分別由常數SS_LEFTNOWORDWRAP、SS_LEFT、SS_CENTER、SS_RIGHT和SS_SIMPLE定義。 系統會以預先定義的方式重新排列這些控件中的文字,但未重新排列的「簡單」文字除外。

應用程式可以使用 SetWindowText 函式或WM_SETTEXT訊息,隨時變更文字靜態控件中的文字。

系統會在靜態控件中顯示任意數目的文字,並裁剪任何不符合的文字。 若要計算控件的適當大小,請擷取文字的字型計量。 如需字型和字型計量的詳細資訊,請參閱 字型和文字

根據預設,靜態控件的視窗文字,如同其他控件,可以包含一個 ampersand,將下列字元定義為控件的快捷鍵(或者,在大部分靜態控件的情況下,為它所標記的控件,也就是定位順序中的下一個控件)。 如果您想要在文字中顯示連字元,而不是使用它們來定義快捷方式,請包含SS_NOPREFIX樣式。

影像靜態控件

影像靜態控件可以顯示點陣圖、圖示(包括動畫圖示),或增強型元檔。 特定靜態控件顯示的圖形類型取決於控件的樣式:SS_BITMAP、SS_ICON或SS_ENHMETAFILE。 應用程式會在建立控件時指定樣式,並指定控件要顯示的點陣圖、圖示或元檔句柄。 建立控件之後,應用程式可以將不同的圖形與控件產生關聯,方法是傳送 STM_SETIMAGE 訊息,並指定新圖形物件的句柄。 應用程式可以藉由傳送 STM_GETIMAGE 訊息,來擷取目前與靜態控件相關聯的圖形物件的句柄。 應用程式會使用 SendDlgItemMessage 函式,將訊息傳送至靜態控件。

擁有者繪製靜態控件

藉由使用SS_OWNERDRAW樣式,應用程式可以負責繪製靜態控件。 每當需要繪製靜態控件時,擁有者繪製靜態控件的父視窗(其擁有者)就會收到 WM_DRAWITEM 訊息。 訊息包含 DRAWITEMSTRUCT 結構的指標,其中包含繪製控件時擁有者視窗所使用的資訊。

靜態控件預設訊息處理

預先定義靜態控件視窗類別的視窗程式會針對靜態控制程式未處理的所有訊息執行預設處理。 當靜態控件傳回 任何訊息的 FALSE 時,預先定義的視窗程式會檢查訊息,並執行下表中所述的預設動作。 在數據表中,文字靜態控件是具有樣式SS_LEFTNOWORDWRAP、SS_LEFT、SS_CENTER、SS_RIGHT或SS_SIMPLE的靜態控件。

訊息 默認動作
WM_CREATE 載入圖形物件,並將視窗大小調整為物件的大小,以用於圖形靜態控件。 對其他靜態控件不採取任何動作。
WM_DESTROY 釋放並終結圖形靜態控件的任何圖形物件。 對其他靜態控件不採取任何動作。
WM_ENABLE 重新繪出可見的靜態控件。
WM_ERASEBKGND 傳回 TRUE,表示控件會清除背景。
WM_GETDLGCODE 傳回DLGC_STATIC。
WM_GETFONT 傳回文字靜態控件字型的句柄。
WM_GETTEXT 傳回復制的字元數。
WM_GETTEXTLENGTH 傳回文字靜態控件文字的長度,以字元為單位。
WM_LBUTTONDBLCLK 如果控件樣式SS_NOTIFY,則會傳送 父視窗STN_DBLCLK 通知碼。
WM_LBUTTONDOWN 如果控件樣式SS_NOTIFY,則傳送 父視窗STN_CLICKED 通知碼。
WM_NCLBUTTONDBLCLK 如果控件樣式SS_NOTIFY,則會傳送 父視窗STN_DBLCLK 通知碼。
WM_NCLBUTTONDOWN 如果控件樣式SS_NOTIFY,則傳送 父視窗STN_CLICKED 通知碼。
WM_NCHITTEST 如果控件樣式是SS_NOTIFY,則會傳回TCLIENT;否則會傳回 HTTRANSPARENT。
WM_PAINT 重新繪出控件。
WM_SETFONT 設定文字靜態控件的字型和重新貼圖。
WM_SETTEXT 設定文字靜態控件的文字和重新貼圖。

 

預先定義的視窗程式會將所有其他訊息傳遞至 DefWindowProc 以進行默認處理。