Microsoft Foundation Class Library 支持可停駐工具欄。 可停駐的工具列可以附加或停駐到其父視窗的任一側,或者可以在獨立的迷你框架視窗中分離或浮動。 本文說明如何在應用程式中使用可停駐工具列。
如果您使用 [應用程式精靈] 來產生應用程式的基本架構,系統會要求您選擇是否要可停駐工具列。 根據預設,[應用程式精靈] 會產生程式代碼,以執行在應用程式中放置可停駐工具列所需的三個動作:
如果遺漏任何這些步驟,您的應用程式將會顯示標準工具列。 您必須針對應用程式中每個可停駐工具列執行最後兩個步驟。
本文涵蓋的其他主題包括:
如需範例,請參閱 MFC 一般範例 DOCKTOOL 。
啟用框架視窗中的停駐
若要將工具列停駐到框架視窗,必須啟用框架視窗(或目的地),才能允許停駐。 這是藉由使用 CFrameWnd::EnableDocking 函數來完成,它採用一個 DWORD 參數,這個參數是一組樣式位,指示框架視窗可以接受停駐的哪一側。 如果工具列即將停駐,而有多個側邊可供選擇,則會依上、下、左、右的順序,使用傳遞至 EnableDocking
的參數中所指出的側邊。 如果您要能夠在任何地方停駐控制列,請將 CBRS_ALIGN_ANY 傳遞至 EnableDocking
。
啟用工具列的停駐
備妥目的地以進行停駐之後,您必須以類似的方式準備工具列(或來源)。 針對您想要停駐的每個工具列呼叫 CControlBar::EnableDocking ,並指定工具列應該停駐的目標端。 如果在呼叫中指定的任何側邊都不符合在框架視窗中已啟用停駐的側邊,則工具列無法停駐,而會處於浮動狀態。 一旦浮動,它仍然是浮動工具列,無法固定在框架窗口上。
如果您想要的效果是永久浮動工具列,請使用參數0呼叫 EnableDocking
。 然後呼叫 CFrameWnd::FloatControlBar。 工具列會維持浮動狀態,永久無法停駐任何位置。
停駐工具列
當用戶嘗試將工具列放在允許停駐的框架視窗側邊時,架構會呼叫 CFrameWnd::DockControlBar。
此外,您可以隨時呼叫此函式,將控制列停駐到框架視窗。 這通常會在初始化期間完成。 多個工具列可以附加在框架視窗的某一側。
浮動工具列
從框架視窗中卸下可停靠的工具列稱作浮動工具列。 呼叫 CFrameWnd::FloatControlBar 來執行此動作。 指定要浮動的工具列、放置位置的點,以及決定浮動工具列是水平還是垂直的對齊樣式。
當使用者將工具列從停駐的位置拖曳,並將它放在未啟用停駐的位置時,架構會呼叫此函式。 這可以是框架窗口內外的任何位置。 如同 ,您也可以在 DockControlBar
初始化期間呼叫此函式。
可停駐工具列的 MFC 實作不提供某些支援可停駐工具列的應用程式中找到的擴充功能。 未提供可自定義工具列等功能。
動態調整工具列的大小
從 Visual C++ 4.0 版開始,您可以讓應用程式的使用者動態調整浮動工具列的大小。 一般而言,工具列具有長而線性的形狀,會以水平顯示。 但是您可以變更工具列的方向及其形狀。 例如,當使用者將工具列停駐在框架視窗的其中一個垂直側邊時,圖形會變更為垂直版面。 您也可以將工具列重新塑造成具有多個按鈕列的矩形。
您可以:
將動態調整大小指定為工具列特性。
指定工具列的固定大小作為其特性。
若要提供此支援,在 CToolBar::Create 成員函式的呼叫中,有兩個新的工具列樣式可供使用。 他們是:
CBRS_SIZE_DYNAMIC 控制列是動態的。
CBRS_SIZE_FIXED 控制欄是固定的。
大小動態樣式可讓使用者在工具列浮動時調整其大小,但在停駐時不會重設大小。 當使用者拖曳其邊緣時,工具列會「換行」,以變更圖形。
大小固定樣式會保留工具列的包裝狀態,並固定每個欄中按鈕的位置。 您的應用程式使用者無法變更工具列的形狀。 工具列會在指定的位置換行,例如按鈕之間的分隔符位置。 不論工具列是停駐還是浮動,它都維持此圖形。 效果是具有多列按鈕的固定調色盤。
您也可以使用 CToolBar::GetButtonStyle 傳回工具列上按鈕的狀態和樣式。 按鈕的樣式會決定按鈕的顯示方式,以及它如何回應使用者輸入;狀態會告知按鈕是否處於包裝狀態。
設定 Fixed-Style 工具列的折行位置
對於樣式為固定大小的工具列,請指定工具列按鈕的索引,以便工具列在該處換行。 下列程式代碼示範如何在主框架視窗的 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 類別的成員函式來管理工具列的動態配置。 請參閱 DOCKTOOL 中的檔案 EDITBAR.CPP。