停駐和浮動工具列
Microsoft Foundation Class Library 支援可停駐工具列。 可停駐的工具列可以附加或停駐至其父視窗的任何一側,或者可以在自己的迷你框架視窗中卸離或浮動。 本文說明如何在應用程式中使用可停駐工具列。
如果您使用 [應用程式精靈] 來產生應用程式的基本架構,系統會要求您選擇是否要可停駐工具列。 根據預設,[應用程式精靈] 會產生程式碼,以執行在應用程式中放置可停駐工具列所需的三個動作:
如果遺漏任何這些步驟,您的應用程式將會顯示標準工具列。 您必須針對應用程式中每個可停駐工具列執行最後兩個步驟。
本文涵蓋的其他主題包括:
如需範例,請參閱 MFC 一般範例 DOCKTOOL 。
啟用框架視窗中的停駐
若要將工具列停駐到框架視窗,必須啟用框架視窗(或目的地),才能允許停駐。 這會使用 CFrameWnd::EnableDocking 函 式來完成,它會採用一 組樣式位的 DWORD 參數,指出框架視窗接受停駐的哪一端。 如果工具列即將停駐,而且可以停駐多個側邊,傳遞至 EnableDocking
的參數中指出的側邊會依下列順序使用:上、下、左、右。 如果您想要能夠在任何地方停駐控制列,請將CBRS_ALIGN_ANY 傳遞 至 EnableDocking
。
啟用工具列的停駐
備妥目的地以進行停駐之後,您必須以類似的方式準備工具列(或來源)。 針對您想要停駐的每個工具列呼叫 CControlBar::EnableDocking ,並指定工具列應該停駐的目標端。 如果在呼叫中未指定任何一側,以 CControlBar::EnableDocking
符合在框架視窗中啟用停駐的側邊,工具列就無法停駐, 它會浮動。 一旦浮動,它仍然是浮動工具列,無法停駐到框架視窗。
如果您想要的效果是永久浮動工具列,請使用參數 0 呼叫 EnableDocking
。 然後呼叫 CFrameWnd::FloatControlBar 。 工具列會維持浮動狀態,永久無法停駐任何位置。
停駐工具列
當使用者嘗試將工具列放在允許停駐的框架視窗側邊時,架構會呼叫 CFrameWnd::D ockControlBar 。
此外,您可以隨時呼叫此函式,將控制列停駐到框架視窗。 這通常會在初始化期間完成。 多個工具列可以停駐在框架視窗的特定一側。
浮動工具列
從框架視窗中斷可停駐工具列的卸離稱為浮動工具列。 呼叫 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 檔案。DOCKTOOL 中的 CPP。