共用方式為


TN031: 控制列

注意事項注意事項

由於它第一次線上文件中包含尚未更新下列技術提示。如此一來,某些程序和主題可能已經過期或不正確。如需最新資訊,建議您先搜尋線上文件索引中有興趣的主題。

這個註解告訴您,在 MFC 控制列類別: 一般 CControlBar, CStatusBar, CToolBar, CDialogBar,以及 CDockBar

CControlBar

A ControlBarCWnd-衍生的類別:

  • 對齊頂端或底端的框架視窗。

  • 可能包含子項目做為其中一個以 HWND 為基礎的控制項 (例如, CDialogBar) 或非-HWND基礎項目 (例如, CToolBarCStatusBar)。

控制列支援其他的樣式:

  • CBRS_TOP(預設值) 釘選控制列至最上方。

  • CBRS_BOTTOM釘選到下控制列。

  • CBRS_NOALIGN並不控制列時重新調整位置的父代重新調整大小。

類別衍生自CControlBar提供一些比較有趣的實作:

  • CStatusBar狀態列中,項目都包含文字的狀態] 列窗格。

  • CToolBar工具列項目會對齊資料列中的點陣圖按鈕。

  • CDialogBar包含標準 windows 工具列類似的框架 (從對話方塊範本資源所建立的) 的控制項。

  • CDockBar a 的其他通用定位區域CControlBar衍生的物件。 特定的成員函式和此類別的變數有可能在未來版本中變更項目。

所有控制列物件/視窗都會都是某些父框架視窗的子視窗。 它們通常被加入為同層級 (例如,MDI 用戶端或檢視) 的圖文框的工作區。 請務必在控制項上的子視窗識別碼。 預設版面配置的控制列只能與 Id 範圍中的控制列的 AFX_IDW_CONTROLBAR_FIRSTAFX_IDW_CONTROLBAR_LAST。 請注意,即使只有一範圍的 256 控制項列的識別碼,這些控制項列的第一個 32 Id 是特殊因為直接受 「 預覽列印架構。

CControlBar類別會提供標準的實作:

  • 對齊頂端、 底端,或框架的任一邊的控制列。

  • 正在配置控制的項目陣列。

  • 支援在衍生類別的實作。

C + + 控制項列物件通常會內嵌為成員的CFrameWnd衍生的類別,並將會清理何時父代HWND ,而且物件會損毀。 如果您需要配置在堆積上的控制項列物件,您可以輕鬆地設定 m_bAutoDestruct 成員,才能 ,則為 TRUE 若要讓控制列"刪除此"時HWND損毀。

注意事項注意事項

如果您要建立您自己CControlBar-衍生的類別,而不是使用 MFC 的其中一項衍生的類別,例如CStatusBarCToolBar,或CDialogBar,您必須設定m_dwStyle資料成員。這可以在覆寫的建立

// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create( CWnd* pParentWnd, DWORD dwStyle, UINT nID )
{
   m_dwStyle = dwStyle;

   .
   .
   .
}

控制列的版面配置演算法

控制列的版面配置演算法並不困難。 框架視窗會傳送訊息 WM_SIZEPARENT 到控制列範圍內的所有子系。 這則訊息,連同會傳遞變數的指標,父代的用戶端矩形。 此訊息會傳送到疊置順序中的子系。 控制列的子系會使用此資訊來放置本身,以及減少父代的用戶端區域的大小。 最後會保持正常的用戶端區域 (較少的控制列) 的矩形用來決定主用戶端視窗 (通常是 MDI 用戶端、 檢視或分隔視窗) 的位置。

請參閱CWnd::RepositionBarsCFrameWnd::RecalcLayout如需詳細資訊。

MFC 私用 Windows 訊息,包括 WM_SIZEPARENT,會詳加 技術的附註 24

CStatusBar

狀態列上會有一列文字輸出窗格的控制列。 有兩種常見的情況,若要使用的文字輸出窗格:

  • 以訊息行

    (例如,[標準] 功能表說明訊息列)。 這些通常是以 0 起始的索引存取

  • 狀態指示器一樣

    (比方說,端點、 數字和 SCRL 指標)。 這些通常被透過字串/命令 id。

[狀態] 列的字型是 10 點新細明體 (取決於 Windows 介面應用程式設計指南 》 或字型自行最符合項目的 10 點瑞士調和間距字型)。 在某些 Windows 版本,例如日文版中,選取的字型有不同。

在狀態列上所使用的色彩也會與 Windows 介面應用程式設計指南 》 所推薦的一致。 這些色彩並不硬式編碼,並在控制台中的使用者自訂回動態變更。

項目

Windows 色彩值

預設 RGB

狀態] 列的背景

COLOR_BTNFACE

RGB (192、 192,192)

狀態列文字

COLOR_BTNTEXT

RGB 000、 000 (000)

狀態列停在左上方邊緣上

COLOR_BTNHIGHLIGHT

RGB (255、 255、 255)

狀態列上傀儡/右邊緣

COLOR_BTNSHADOW

RGB (128、 128,128)

CStatusBar CCmdUI 支援

標記通常更新的方式是透過ON_UPDATE_COMMAND_UI的機制。 閒置的時間,在狀態列上會呼叫ON_UPDATE_COMMAND_UI指示區] 窗格的字串 id 的處理常式。

ON_UPDATE_COMMAND_UI可以在呼叫處理常式:

  • 啟用: 若要啟用或停用的窗格。 已停用的窗格看起來完全一樣的已啟用的窗格,但文字不可見 (也就是關閉的文字指標)。

  • SetText: 若要變更的文字。 要特別小心,如果您使用這個因為窗格不會自動調整。

參考類別 CStatusBar類別庫參考如需詳細資訊CStatusBar建立與自訂的 Api。 [狀態列] 一開始就會顯示之前,應該大部分自訂狀態列。

[狀態列] 支援只有一個易於伸展] 窗格中,通常是第一個窗格。 該窗格的大小是最小的大小。 如果 [狀態列] 大於所有窗格的最小,任何額外的寬度將會交給易於伸展窗格。 預設應用程式,請使用狀態列的端點、 數字和 SCRL 有靠右對齊的指標,因為第一個窗格可讓您易於伸展。

CToolBar

工具列是一項控制列具有一列可能包含分隔符號的點陣圖按鈕。 支援兩種樣式的按鈕: 按鈕和核取方塊] 按鈕。 核取方塊按鈕即可建置選項群組的功能和ON_UPDATE_COMMAND_UI

在工具列上的點陣圖按鈕是取自一個點陣圖。 這個點陣圖必須含有一個映像或每個按鈕的圖像 (glyph)。 通常點陣圖影像/圖像的順序是它們會在螢幕繪製的順序相同。 (這可以變更使用該自訂 Api)。

每個按鈕必須是相同的大小。 預設為標準 24 x 22 像素。 每一個影像/圖像 (glyph) 必須是相同的大小,而且必須以並排點陣圖中。 預設影像/圖像 (glyph) 大小為 16 x 15 像素。 因此,具有 (使用標準的大小) 的 10 個按鈕的工具列,您必須是 160 個像素寬和高 15 像素的點陣圖。

每個按鈕都只能有一個影像/圖像。 不同的按鈕說明和樣式 (例如,最多,按下向下、 停用,往下,確定已停用),從該一個影像/圖像以演算法產生。 理論上可任何彩色點陣圖或 DIB。 演算法來產生不同的按鈕最能說明 works,如果原始影像的灰色陰影。 在一般] 工具列按鈕和 MFC 一般範例中所提供的工具列按鈕美工圖案看起來的美工圖案如需範例。

在工具列上所使用的色彩也會與 Windows 介面應用程式設計指南 》 所推薦的一致。 這些色彩並不硬式編碼,並在控制台中的使用者自訂回動態變更。

項目

Windows 色彩值

預設 RGB

工具列背景

COLOR_BTNFACE

RGB(192,192,192)

工具列按鈕停在左上方邊緣

COLOR_BTNHIGHLIGHT

RGB(255,255,255)

工具列按鈕傀儡/右邊緣

COLOR_BTNSHADOW

RGB(128,128,128)

此外,好像它們是標準的 Windows 按鈕控制項,會重新著色] 工具列的點陣圖按鈕。 從資源,並在以回應在控制台中的使用者自訂影響的系統色彩變更回載入點陣圖時,就會發生這個重新著色。 工具列點陣圖中的下列色彩將自動著色,讓他們應該小心使用。 如果您不想讓您重新著色的點陣圖的一部份,則請使用密切對應 RGB 值的其中一個所近似的色彩。 對應是依照確切的 RGB 值。

RGB 值

動態對應的色彩值

RGB 000、 000 (000)

COLOR_BTNTEXT

RGB (128、 128,128)

COLOR_BTNSHADOW

RGB (192、 192,192)

COLOR_BTNFACE

RGB (255、 255、 255)

COLOR_BTNHIGHLIGHT

參考類別 CToolBar類別庫參考如需詳細資訊CToolBar建立與自訂的 Api。 工具列一開始就會顯示之前,應該大部分自訂的工具列。

自訂的 Api 可以用來調整按鈕的識別元,樣式之外,空格字元寬度] 和 [哪一個影像/圖像 (glyph) 用於什麼] 按鈕。 預設情況下您不需要使用這些 Api。

CToolBar CCmdUI 支援

工具列按鈕會一直更新的方式是透過ON_UPDATE_COMMAND_UI的機制。 在閒置時間,工具列會呼叫ON_UPDATE_COMMAND_UI具有該按鈕的命令 ID 的處理常式。 ON_UPDATE_COMMAND_UI不會呼叫分隔符號,但它會呼叫按鈕和核取方塊按鈕。

ON_UPDATE_COMMAND_UI可以在呼叫處理常式:

  • 啟用: 若要啟用或停用] 按鈕。 這也同樣適用於按鈕及核取方塊按鈕。

  • SetCheck: 若要設定按鈕的核取狀態。 對於一個工具列按鈕呼叫這會將其變成] 核取方塊] 按鈕。 SetCheck採用參數可以是 0 (不檢查)、 1 (已核取) 或 2 (不確定)

  • SetRadio: 簡略的SetCheck

核取方塊按鈕是"AUTO"核取方塊。 也就是說,當使用者按下它們時它們將會立即變更狀態。 檢查是向下或壓下狀態。 沒有內建的使用者介面方法來變更按鈕到 「 不確定 「 檢視狀態。 必須完成的執行程式碼。

自訂 Api 將允許您變更指定的工具列按鈕的狀態,則應該變更這些狀態中的為最好是ON_UPDATE_COMMAND_UI的工具列按鈕所代表的命令處理常式。 請記住,閒置處理程序將會變更狀態的工具列按鈕與ON_UPDATE_COMMAND_UI處理常式,以便在下一步] 之後,這些狀態透過 SetButtonStyle 所做的任何變更可能弄丟閒置。

工具列按鈕會傳送 WM_COMMAND 訊息,就像一般的按鈕或功能表項目,並通常由ON_COMMAND所提供的相同類別中的處理常式ON_UPDATE_COMMAND_UI處理常式。

有四個工具列按鈕樣式 (TBBS_ 的值) 用來顯示狀態:

  • TBBS_CHECKED: (向下) 目前簽核取方塊。

  • TBBS_INDETERMINATE:] 核取方塊是目前不確定的。

  • TBBS_DISABLED: 目前關閉] 按鈕。

  • TBBS_PRESSED: 目前按按鈕。

六個的官方 Windows 介面應用程式設計指南 》 按鈕樣式以下列的 TBBS 值來表示:

  • 上 = 0

  • 滑鼠往下 = TBBS_PRESSED (|] 樣式)

  • 已停用 = TBBS_DISABLED

  • 下 = TBBS_CHECKED

  • 已停用關閉 = TBBS_CHECKED |TBBS_DISABLED

  • 不確定 = TBBS_INDETERMINATE

CDialogBar

對話方塊列是一項控制列,其中包含標準 Windows 控制項。 動作卻像是一個對話方塊,因為它包含的控制項,並支援兩者間定位停駐。 它也就像一個對話方塊,因為它使用對話方塊樣板來代表列。

A CDialogBar用來包含打開標準的控制項的 [預覽列印] 工具列。

使用CDialogBar ,就像是CFormView。 您必須定義對話方塊列的對話方塊樣板,並移除以外的所有樣式 WS_CHILD。 請注意對話方塊不能看得見。

控制項告知的CDialogBar將傳送至父項控制列 (類似工具列按鈕)。

CDialogBar CCmdUI 支援

對話方塊列的按鈕應該透過更新ON_UPDATE_COMMAND_UI處理常式的機制。 在閒置時,就會呼叫對話方塊列ON_UPDATE_COMMAND_UI具有要有 ID 的所有按鈕的命令 ID 的處理常式 > = 0x8000 (也就是在命令 Id 的範圍內)。

ON_UPDATE_COMMAND_UI可以在呼叫處理常式:

  • 啟用: 以啟用或停用] 按鈕。

  • SetText: 若要變更按鈕的文字。

您可以在標準視窗管理員 Api 的自訂。

請參閱

其他資源

技術的備忘稿編號

依類別的技術注意事項