停駐及浮動工具列
Mfc 程式庫支援可停駐工具列。可停駐工具列可以貼附或停駐,它的父視窗之任一側,或中斷連接,或在它自己的小型框架視窗上浮動。本文說明如何在應用程式中使用可停駐工具列。
如果您使用應用程式精靈產生基本架構應用程式時,會要求您選擇是否要可停駐工具列。根據預設,應用程式精靈產生程式碼會執行必要將可停駐工具列置於應用程式中的三個動作:
啟用停駐在框架視窗內。
啟用工具列停駐。
停駐工具列 (在框架視窗)。
如果遺漏任何一個步驟,您的應用程式將會顯示標準工具列。您一定要替程式中每一個可停駐工具列執行後兩個步驟。
本文涵蓋的其他主題包括:
浮動工具列
動態調整工具列大小
設定自動換行位置固定樣式工具列
請參閱 MFC 一般範例 DOCKTOOL 的範例。
啟用停駐在框架視窗內的功能
若要將工具列停駐至框架視窗,框架視窗 (或目的端) 必須設成容許停駐。這是使用 CFrameWnd::EnableDocking 函式,一種DWORD參數,是一組樣式位元指示框架視窗的哪一邊接受停駐。如果工具列即將停駐,且有多個可能要停駐的邊中, 指出的側邊的參數傳送到EnableDocking用下列順序: 頂端、 底端、 左側、 右側。如果您想要停駐控制項長條圖中任何位置,傳遞CBRS_ALIGN_ANY到EnableDocking。
啟用工具列停駐功能
您已經準備好停駐的目的地之後,您必須準備方式還是相似的工具列 (或來源)。呼叫 CControlBar::EnableDocking 替每一個您想要停駐的工具列,指定目的地 sides 應該固定工具列。如果沒有對呼叫中指定目的邊CControlBar::EnableDocking已啟用停駐在框架視窗內的邊相符,無法在停駐工具列,它會浮動。一旦浮動的話,工具列將永遠是浮動狀態,無法停駐在框架視窗上。
如果您想要的效果是永久的浮動工具列,呼叫EnableDocking與為參數為 0。然後呼叫 CFrameWnd::FloatControlBar。工具列就會浮動狀態,永遠無法停駐在視窗。
停駐工具列
架構呼叫 CFrameWnd::DockControlBar 使用者嘗試卸除工具列,可讓停駐在框架視窗的一邊。
此外,您可以呼叫這個函式在任何時候,若要停駐至框架視窗的控制列。這通常都是在初始化期間。多個工具列可停駐在框架視窗之任一側。
浮動工具列
中斷連結可停駐工具列脫離框架視窗,就會呼叫浮動工具列。呼叫 CFrameWnd::FloatControlBar 來執行這項操作。指定要浮動工具列,它應該會放置的位置,將點和決定浮動的工具列為水平或垂直對齊的樣式。
當使用者拖曳工具列停駐位置,並放置至何處停駐功能未啟用的位置時,架構會呼叫這個函式。這可以是任何一處的內部或外部的框架視窗。如同DockControlBar,您也可以在初始化期間呼叫這個函式。
可停駐工具列的 MFC 實作並不提供部分擴充功能在許多應用程式的支援可停駐工具列中找到。不會提供功能,例如自訂工具列。
動態調整工具列大小
作為的 Visual C++ 4.0 版,您可以讓您的應用程式,以動態方式調整浮動工具列上的使用者。一般來說,工具列上有一個長而線性的圖案,以水平顯示。但是,您可以變更工具列的方向和形狀。比方說,當使用者將工具列垂直框架視窗的側邊的其中之一,圖形會變更成垂直的配置。它也可將工具列的形狀變成矩形與多個資料列的按鈕。
您可以:
動態大小設定指定成工具列的特性。
固定的大小設定指定成工具列的特性。
若要提供這項支援,有兩個新工具列樣式,以用於呼叫 CToolBar::Create 成員函式。這些視窗是:
CBRS_SIZE_DYNAMIC 是動態的控制列。
CBRS_SIZE_FIXED 固定的控制列。
大小動態樣式讓您調整工具列的大小,則處於浮動狀態,但不是在停駐時的使用者。工具列 「 包裝 」 在需要時,若要將圖案變更為使用者拖曳邊框。
大小固定樣式保留換行的 [工具列按鈕的位置,在每個資料行中的狀態。您的應用程式使用者無法變更工具列的形狀。工具列換行,在指定處,例如按鈕間的分隔符號處。它可以維持此圖形是否已停駐或浮動的工具列。結果是多欄位按鈕的固定工具板。
您也可以使用 CToolBar::GetButtonStyle 要傳回的狀態及按鈕樣式,在工具列上。按鈕的樣式決定按鈕的顯示方式,以及如何回應使用者輸入。 狀態會指示按鈕是否換行的狀態。
設定固定樣式工具列之換行位置
為大小固定樣式工具列,請指定工具列按鈕的工具列會自動換行的索引。下列程式碼示範如何執行這項操作,在主框架視窗的OnCreate覆寫:
// Get the style of the first button separator
UINT nStyle = m_wndToolBar.GetButtonStyle(3);
// Augment the state for wrapping
nStyle |= TBBS_WRAPPED;
m_wndToolBar.SetButtonStyle(3, nStyle);
// Do the same for other wrap locations ...
// Set the bar style to size fixed
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
// Call docking/floating functions as needed ...
MFC 一般範例 DOCKTOOL 示範如何使用類別成員函式 CControlBar 和 CToolBar 來管理動態配置的工具列。請參閱 EDITBAR 的檔案。CPP DOCKTOOL 中。