共用方式為


TN031:控制列

注意事項注意事項

下列技術提示自其納入線上文件以來,未曾更新。因此,有些程序和主題可能已過期或不正確。如需最新資訊,建議您在線上文件索引中搜尋相關的主題。

這個附註在說明 MFC 控制列類別:概觀 CControlBar、 CStatusBar、 CToolBar、 CDialogBar和 CDockBar

CControlBar

ControlBarCWnd衍生類別的:

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

  • 可能包含是以 HWND 為基礎的控制項子項目 (例如 CDialogBar),例如或非基本項目 (HWNDCToolBarCStatusBar)。

控制項會支援其他樣式:

  • CBRS_TOP (預設) 連接在上面的控制列。

  • CBRS_BOTTOM 連接至底部的控制列。

  • 當父代調整大小時,CBRS_NOALIGN 不重新定位控制列。

CControlBar 衍生的類別提供更有趣的實作:

  • CStatusBar 的狀態列,否則表示包含文字的狀態列窗格。

  • CToolBar 的工具列,項目是循序對齊的點陣圖按鈕。

  • 包含標準 Windows 控制項的CDialogBar 物件與工具列的框架 (從建立對話方塊樣板資源)。

  • CDockBar 的通用固定其他 CControlBar 衍生物件的區域。 特定成員函式和變數可以在這個類別可能會在未來的發行版本。

所有控制列物件/視窗會是子視窗一些父框架視窗。 它們通常會當做同層級到框架工作區 (例如, MDI 用戶端或檢視)。 一個控制列的子視窗 ID 是很重要的。 控制項的預設設定為具有 ID 的控制列只會在 AFX_IDW_CONTROLBAR_FIRST 內對 AFX_IDW_CONTROLBAR_LAST。 請注意,即使有 256 個控制列 ID 的範圍,前 32 這些控制列 ID 是特殊的,因為它們的預覽列印結構直接支援。

CControlBar 類別提供標準實作:

  • 對齊儲存格的上方、下方,或是框架的任一端的控制列。

  • 配置控制項的陣列。

  • 支援衍生類別的實作。

在終結, C++ 控制列物件通常會內嵌為 CFrameWnd 衍生類別的成員會清除父代 HWND 和物件。 如果您需要配置在堆積上控制列物件,您可以設定 m_bAutoDestruct 成員至 TRUE 做控制列「delete this」終結時, HWND

注意事項注意事項

使用其中一個 MFC 的衍生類別,例如 CStatusBar,如果您建立 CControlBar衍生類別,而不是 CToolBar,則為 CDialogBar,則必須設定 m_dwStyle 資料成員。這在 Create覆寫可以做:

// 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,在 Technical Note 24中說明。

CStatusBar

狀態列是有文字輸出窗格中資料列的控制列。 有兩種常見的方式使用文字輸出窗格:

  • 為訊息行

    (例如,標準功能表說明訊息行)。 這是以 0 起始的一般存取索引

  • 為狀態指標

    (例如,端點、數字和 SCRL 指標)。 這些字串/命令 ID. 通常存取

狀態列的字型是 10 點 MS Sans Serif (指示由 Windows 介面應用程式設計方針或 10 點瑞士人比例字型的字型對應器最符合的項目)。 在視窗中某些版本,例如日文版,選取字型是不同的。

此狀態列的色彩與 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)

CCmdUI 支援 CStatusBar

指標會定期更新的方式是透過 ON_UPDATE_COMMAND_UI 機制。 Time 閒置時間,狀態列會呼叫具有指示器窗格的字串 ID 的 ON_UPDATE_COMMAND_UI 處理常式。

ON_UPDATE_COMMAND_UI 處理常式進行呼叫:

  • Enable:啟用或停用窗格。 一個方式可讓窗格,但文字的停用窗格外觀不可見 (即關閉文字指標)。

  • SetText:變更文字。 請注意,如果您使用此項目,因為窗格不會自動調整大小。

如需 CStatusBar 建立和自訂 API 的詳細資訊,請參考 類別庫參考》中的CStatusBar 類別。 要在狀態列初始可見之前,狀態列的大部分自訂應該完成。

狀態列只支援可展開長窗格,通常是第一個窗格。 該窗格的大小實際上是最小大小。 如果狀態列大於所有窗格大小的最小值,所有多餘的寬度要測量可以展開長的窗格。 因為第一個窗格是可以展開長,與狀態列的預設應用程式擁有端點,數字和 SCRL 的靠右對齊的指標。

CToolBar

工具列與可能包含分隔符號的點陣圖按鈕的資料列的控制列。 按鈕兩個樣式支援:按鈕和核取方塊按鈕。 無線群組功能可以用核取方塊按鈕和 ON_UPDATE_COMMAND_UI建立。

在工具列的點陣圖按鈕從點陣圖中取得。 這個點陣圖必須包含影像或圖像的每個按鈕的。 通常是影像/圖像的命令在點陣圖是它們在螢幕上繪製的順序相同。(這可以變更使用自訂 API)。

每個按鈕都必須有相同的大小。 預設值為標準 24x22 像素。 每個影像/圖像必須是相同大小,而且必須是並行點陣圖。 預設影像/影像大小是 16x15 像素。 因此,具有 10 個按鈕的工具列 (使用標準大小),您需要寬度為 160 像素、高 15 像素的點陣圖。

每個按鈕只能有一個中的圖像。 不同的按鈕狀態和樣式 (例如,按下,,關閉,停用,停用關閉,無法判斷) 演算法從該影像或影像產生。 所有色彩點陣圖或 DIB 可以用假設。 如果原始影像是灰色,也就是產生不同的按鈕狀態演算法最適合。 請在 MFC 一般範例和工具列按鈕 clipart 提供的標準工具列按鈕為 CLIPART 範例。

此工具列的色彩與 Windows 介面應用程式設計方針的建議也是一致的。 這些色彩不硬式編碼和動態地變更以回應在主控台的使用者自訂。

項目

Windows 色彩值

預設值 RGB

工具列背景

COLOR_BTNFACE

RGB(192,192,192)

工具列按鈕上方/離開框線

COLOR_BTNHIGHLIGHT

RGB(255,255,255)

工具列按鈕執行迴圈功能程式/右緣

COLOR_BTNSHADOW

RGB(128,128,128)

此外,工具列點陣圖按鈕 recolored,如同標準 Windows 按鈕控制項。 表示點陣圖載入從資源和回應系統色彩變更以回應使用者在自訂控制項時,重新著色的發生這種情況。 在工具列點陣圖的下列色彩自動重新上色,因此應該謹慎使用。 如果您不希望有 recolored 的點陣圖的部分,則請使用嚴格地存取其中一個對應的 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 建立和自訂 API 的詳細資訊,請參考 類別庫參考》中的CToolBar 類別。 工具列初始可見之前,工具列的大部分自訂應該完成。

自訂 API 可用來調整按鈕 ID,樣式,因此,影像/圖像為的空格字元寬度哪些按鈕使用。 預設您不需要使用這些 API。

CCmdUI 支援 CToolBar

工具列按鈕一律更新的方式是透過 ON_UPDATE_COMMAND_UI 機制。 Time 閒置時間,工具列會呼叫具有的按鈕命令 ID 的 ON_UPDATE_COMMAND_UI 處理常式。 ON_UPDATE_COMMAND_UI 沒有提供 Separator 呼叫,不過,它為按鈕和核取方塊按鈕呼叫。

ON_UPDATE_COMMAND_UI 處理常式進行呼叫:

  • Enable:啟用或停用按鈕。 此為按鈕和核取方塊按鈕同樣地運作。

  • SetCheck:設定按鈕的選取狀態。 呼叫這個工具列按鈕的表單變成核取方塊按鈕。 SetCheck 採用可為 0 的參數 (未核取), 1 (已檢查) 或 2 (不確定)

  • SetRadio: SetCheck的縮寫。

核取方塊按鈕為「Auto」核取方塊按鈕;也就是說,當使用者按下他們會立即變更狀態。 檢查是向下或按下轉換的狀態。 沒有內建使用者介面模式變更按鈕加入至「不定狀態;必須透過程式碼來進行。

自訂 API 可讓您變更指定的工具列按鈕,您的狀態應該最好是變更 ON_UPDATE_COMMAND_UI 處理常式的這些狀態工具列按鈕所表示之命令的。 請記住,閒置處理將變更工具列按鈕狀態有 ON_UPDATE_COMMAND_UI 處理常式的,因此,傳遞 SetButtonStyle 所做的這些狀態所做的任何變更可能會遺失在下延遲之後。

工具列按鈕會傳送像一般按鈕或功能表項目的 WM_COMMAND 資訊和這個 ON_UPDATE_COMMAND_UI 處理常式的相同類別中的 ON_COMMAND 處理常式通常處理。

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

  • TBBS_CHECKED:   核取方塊目前正在檢查 (向下)。

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

  • TBBS_DISABLED:   按鈕目前已停用。

  • TBBS_PRESSED:   按鈕目前的。

六個正式 Windows 介面應用程式設計方針按鈕樣式由下列 TBBS 值表示:

  • Up = 0

  • 按下滑鼠 (= TBBS_PRESSED|其他樣式)

  • 停用 = TBBS_DISABLED

  • 向下 = TBBS_CHECKED

  • 向下停用 = TBBS_CHECKED|TBBS_DISABLED

  • 無法判斷 = TBBS_INDETERMINATE

CDialogBar

關於對話方塊列是的控制列包含標準 Windows 控制項。 它就像對話因為它包含控制項支援定位這兩者。 它也會對話因為它使用對話方塊範本代表此分隔列。

CDialogBar 為列印預覽工具列使用,包含標準按鈕控制項。

使用 CDialogBar 就像使用 CFormView。 您必須定義對話方塊列的對話方塊範本和取消除了 WS_CHILD的所有樣式。 請注意對話方塊不能是可見的。

CDialogBar 的控制項告知會傳送至控制列的父代 (例如工具列按鈕)。

CCmdUI 支援 CDialogBar

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

ON_UPDATE_COMMAND_UI 處理常式進行呼叫:

  • Enable:啟用或停用按鈕。

  • SetText:變更按鈕的文字。

自訂可以透過標準視窗管理員 API 完成。

請參閱

其他資源

依編號顯示的技術提示

依分類區分的技術提示