CMFCMenuBar 類別
實作停駐的功能表列。 如需更多詳細資料,請參閱 Visual Studio 安裝位置下之 VC\atlmfc\src\mfc 資料夾中的原始程式碼。
語法
class CMFCMenuBar : public CMFCToolbar
成員
公用方法
備註
類別 CMFCMenuBar
是實作停駐功能的功能表欄。 它與工具列類似,雖然它無法關閉,但一律會顯示它。
CMFCMenuBar
支持顯示最近使用功能表項物件的選項。 如果啟用此選項,則 CMFCMenuBar
只會在第一次檢視時顯示可用命令的子集。 之後,最近使用的命令會與原始的命令子集一起顯示。 此外,使用者一律可以展開功能表來檢視所有可用的命令。 因此,每個可用的命令都會設定為持續顯示,或只在最近選取時顯示。
若要使用 CMFCMenuBar
物件,請將它內嵌在主視窗框架物件中。 處理 WM_CREATE
訊息時,請呼叫 CMFCMenuBar::Create
或 CMFCMenuBar::CreateEx
。 無論您使用哪一個 create 函式,都會傳入主框架視窗的指標。 然後呼叫 CFrameWndEx::EnableDocking 來啟用停駐。 呼叫 CFrameWndEx::D ockPane 來固定此功能表。
範例
下例示範如何在 CMFCMenuBar
類別中使用各種方法。 此範例示範如何設定窗格的樣式、啟用自定義按鈕、啟用 [說明] 方塊、啟用快捷功能表的陰影,以及更新功能表欄。 此代碼段是 IE 示範範例的一部分。
CMFCMenuBar m_wndMenuBar;
m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC);
m_wndMenuBar.EnableCustomizeButton(TRUE, -1, _T(""));
// first parameter is the command ID for the button of the Help combo box
// third parameter is the width of the button for the combo box in pixels.
m_wndMenuBar.EnableHelpCombobox(1, _T("enter text here"), 30);
m_wndMenuBar.EnableMenuShadows();
m_wndMenuBar.SetMaximizeMode(true);
繼承階層架構
CMFCMenuBar
需求
標頭: afxmenubar.h
CMFCMenuBar::AdjustLocations
調整功能表欄上功能表項的位置。
virtual void AdjustLocations();
備註
CMFCMenuBar::AllowChangeTextLabels
判斷功能表欄中的影像下是否允許文字標籤。
virtual BOOL AllowChangeTextLabels() const;
傳回值
如果使用者可以選擇在影像下顯示文字標籤,則會傳回TRUE。
備註
CMFCMenuBar::AllowShowOnPaneMenu
virtual BOOL AllowShowOnPaneMenu() const;
傳回值
備註
CMFCMenuBar::CalcFixedLayout
virtual CSize CalcFixedLayout(
BOOL bStretch,
BOOL bHorz);
參數
[in] bStretch
[in] bHorz
傳回值
備註
CMFCMenuBar::CalcLayout
virtual CSize CalcLayout(
DWORD dwMode,
int nLength = -1);
參數
[in] dwMode
[in] nLength
傳回值
備註
CMFCMenuBar::CalcMaxButtonHeight
virtual int CalcMaxButtonHeight();
傳回值
備註
CMFCMenuBar::CanBeClosed
virtual BOOL CanBeClosed() const;
傳回值
備註
CMFCMenuBar::CanBeRestored
virtual BOOL CanBeRestored() const;
傳回值
備註
CMFCMenuBar::Create
建立功能表控件,並將它附加至 CMFCMenuBar 物件。
virtual BOOL Create(
CWnd* pParentWnd,
DWORD dwStyle = AFX_DEFAULT_TOOLBAR_STYLE,
UINT nID = AFX_IDW_MENUBAR);
參數
pParentWnd
[in]新 CMFCMenuBar
物件的父視窗指標。
dwStyle
[in]新功能表欄的樣式。
nID
[in]功能表欄子視窗的識別碼。
傳回值
如果成功,則為 TRUE,否則為 FALSE。
備註
建構 CMFCMenuBar
物件之後,您必須呼叫 Create
。 這個方法會建立 控件, CMFCMenuBar
並將它附加至 CMFCMenuBar
物件。
如需工具列樣式的詳細資訊,請參閱 CBasePane::SetPaneStyle。
CMFCMenuBar::CreateEx
建立 具有指定擴充樣式的CMFCMenuBar 物件。
virtual BOOL CreateEx(
CWnd* pParentWnd,
DWORD dwCtrlStyle = TBSTYLE_FLAT,
DWORD dwStyle = AFX_DEFAULT_TOOLBAR_STYLE,
CRect rcBorders = CRect(1,
1,
1,
1),
UINT nID =AFX_IDW_MENUBAR);
參數
pParentWnd
[in]新 CMFCMenuBar
物件的父視窗指標。
dwCtrlStyle
[in]新功能表欄的其他樣式。
dwStyle
[in]新功能表欄的主要樣式。
rcBorders
[in] CRect
參數,指定物件框線 CMFCMenuBar
的大小。
nID
[in]功能表欄子視窗的識別碼。
傳回值
如果方法成功,則為非零;否則為 0。
備註
除了工具列樣式之外,您應該使用這個函式, 而不是 CMFCMenuBar::Create 。 一些常用的其他樣式是TBSTYLE_TRANSPARENT和CBRS_TOP。
如需其他樣式的清單,請參閱 工具列控件和按鈕樣式、 通用控件樣式和 通用窗口樣式。
範例
下列範例示範如何使用 CreateEx
類別的 CMFCMenuBar
方法。 此代碼段是 IE 示範範例的一部分。
CMFCMenuBar m_wndMenuBar;
// The this pointer points to CMainFrame class which extends the CFrameWnd class.
if (!m_wndMenuBar.CreateEx(this, TBSTYLE_TRANSPARENT))
{
TRACE0("Failed to create menubar\n");
return -1; // fail to create
}
CMFCMenuBar::CreateFromMenu
初始化 CMFCMenuBar 物件。 這個方法會在 CMFCMenuBar
HMENU 參數之後建立 物件模型。
virtual void CreateFromMenu(
HMENU hMenu,
BOOL bDefaultMenu = FALSE,
BOOL bForceUpdate = FALSE);
參數
hMenu
[in]功能表資源的句柄。 CreateFromMenu
會使用此資源作為的 CMFCMenuBar
範本。
bDefaultMenu
[in]布爾值,指出新功能表是否為預設功能表。
bForceUpdate
[in]布爾值,指出這個方法是否強制更新功能表。
備註
如果您想要功能表控制件具有與功能表資源相同的功能表項,請使用此方法。 呼叫 CMFCMenuBar::Create 或 CMFCMenuBar::CreateEx 之後,您會呼叫此方法。
CMFCMenuBar::EnableHelpCombobox
啟用位於功能表欄右側的 [說明] 下拉式方塊。
void EnableHelpCombobox(
UINT uiID,
LPCTSTR lpszPrompt = NULL,
int nComboBoxWidth = 150);
參數
uiID
[in][說明] 下拉式方塊按鈕的命令標識符。
lpszPrompt
[in]字串,包含架構在下拉式方塊中顯示的文字,如果它是空的,而不是使用中。 例如,「在這裡輸入文字」。
nComboBoxWidth
[in]下拉式方塊的寬度,以像素為單位。
備註
[說明] 下拉式方塊類似於 Microsoft Word 功能表欄中的 [說明] 下拉式方塊。
當您使用 uiID 設為 0 呼叫這個方法時,這個方法會隱藏下拉式方塊。 否則,此方法會自動在功能表欄右側顯示下拉式方塊。 呼叫此方法之後,請呼叫 CMFCMenuBar::GetHelpCombobox ,以取得所插入 CMFCToolBarComboBoxButton 物件的指標。
CMFCMenuBar::EnableMenuShadows
啟用快捷功能表的陰影。
static void EnableMenuShadows(BOOL bEnable = TRUE);
參數
bEnable
[in]布爾值參數,指出是否應該為快捷功能表啟用陰影。
備註
此方法使用的演算法很複雜,而且可能會降低應用程式在較慢系統上的效能。
CMFCMenuBar::GetAvailableExpandSize
virtual int GetAvailableExpandSize() const;
傳回值
備註
CMFCMenuBar::GetColumnWidth
virtual int GetColumnWidth() const;
傳回值
備註
CMFCMenuBar::GetDefaultMenu
擷取原始功能表的句柄。 架構會從資源檔載入原始功能表。
HMENU GetDefaultMenu() const;
傳回值
功能表資源的句柄。
備註
如果您的應用程式自定義功能表,您可以使用此方法來擷取原始功能表的句柄。
CMFCMenuBar::GetDefaultMenuResId
擷取預設功能表的資源標識碼。
UINT GetDefaultMenuResId() const;
傳回值
功能表資源標識碼。
備註
架構會從資源檔載入物件的預設功能表 CMFCMenuBar
。
CMFCMenuBar::GetFloatPopupDirection
int GetFloatPopupDirection(CMFCToolBarMenuButton* pButton);
參數
[in] pButton
傳回值
備註
CMFCMenuBar::GetForceDownArrows
BOOL GetForceDownArrows();
傳回值
備註
CMFCMenuBar::GetHelpCombobox
傳回 [說明] 下拉式方塊的指標。
CMFCToolBarComboBoxButton* GetHelpCombobox();
傳回值
說明下拉式方塊的指標。 如果隱藏或未啟用 [ 說明 ] 下拉式方塊,則為 NULL。
備註
[說明] 下拉式方塊位於功能表欄右側。 呼叫 CMFCMenuBar::EnableHelpCombobox 方法來啟用此下拉式方塊。
CMFCMenuBar::GetHMenu
擷取附加至 CMFCMenuBar 物件的功能表句柄。
HMENU GetHMenu() const;
CMFCMenuBar::GetMenuFont
擷取目前的功能表字型。
static const CFont& GetMenuFont(BOOL bHorz = TRUE);
參數
bHorz
[in]布爾參數,指定是否要傳回水準或垂直字型。 TRUE 表示水準字型。
傳回值
包含目前功能表欄字型之 CFont 參數的指標。
備註
傳回的字型是應用程式的全域參數。 所有 CMFCMenuBar
物件都會維護兩個全域字型。 這些個別字型用於水平和垂直功能表欄。
CMFCMenuBar::GetMenuItem
根據專案索引,擷取功能表欄上的CMFCToolBarButton物件。
CMFCToolBarButton* GetMenuItem(int iItem) const;
參數
iItem
[in]要傳回之功能表項的索引。
傳回值
符合 iItem 所指定索引之 物件的指標CMFCToolBarButton
。 如果索引無效,則為 NULL。
CMFCMenuBar::GetRowHeight
virtual int GetRowHeight() const;
傳回值
備註
CMFCMenuBar::GetSystemButton
CMFCToolBarMenuButtonsButton* GetSystemButton(
UINT uiBtn,
BOOL bByCommand = TRUE) const;
參數
[in] uiBtn
[in] bByCommand
傳回值
備註
CMFCMenuBar::GetSystemButtonsCount
int GetSystemButtonsCount() const;
傳回值
備註
CMFCMenuBar::GetSystemMenu
CMFCToolBarSystemMenuButton* GetSystemMenu() const;
傳回值
備註
CMFCMenuBar::HighlightDisabledItems
控制架構是否醒目提示已停用的功能表項。
static void HighlightDisabledItems(BOOL bHighlight = TRUE);
參數
bHighlight
[in]布爾參數,指出架構是否醒目提示無法使用的功能表項。
備註
根據預設,當使用者將滑鼠指標放在它們上方時,架構不會反白顯示無法使用的功能表項。
CMFCMenuBar::IsButtonExtraSizeAvailable
virtual BOOL IsButtonExtraSizeAvailable() const;
傳回值
備註
CMFCMenuBar::IsHighlightDisabledItems
指出架構是否醒目提示無法使用的功能表項。
static BOOL IsHighlightDisabledItems();
傳回值
如果醒目提示無法使用的功能表項,則為TRUE;否則為 FALSE。
備註
根據預設,當使用者將滑鼠指標放在它們上方時,架構不會反白顯示無法使用的功能表項。 使用 CMFCMenuBar::HighlightDisabledItems 方法來啟用此功能。
CMFCMenuBar::IsMenuShadows
指出架構是否繪製快捷功能表的陰影。
static BOOL IsMenuShadows();
傳回值
如果架構繪製功能表陰影,則為TRUE;否則為 FALSE。
備註
使用 CMFCMenuBar::EnableMenuShadows 方法來啟用或停用此功能。
CMFCMenuBar::IsRecentlyUsedMenus
指出最近使用的功能表命令是否顯示在功能表欄上。
static BOOL IsRecentlyUsedMenus();
傳回值
如果對象顯示最近使用的功能表命令,則為 CMFCMenuBar
非零,否則為 0。
備註
使用 CMFCMenuBar::SetRecentlyUsedMenus 函式來控制功能表欄是否顯示最近使用的功能表命令。
CMFCMenuBar::IsShowAllCommands
指出功能表是否顯示所有命令。
static BOOL IsShowAllCommands();
傳回值
如果 顯示所有命令, CMFCMenuBar
則為非零;否則為 0。
備註
CMFCMenuBar
對象可以設定為顯示所有命令或只顯示命令子集。 如需此功能的詳細資訊,請參閱 CMFCMenuBar 類別。
IsShowAllCommands
將會告訴您如何為 CMFCMenuBar
物件設定這項功能。 若要控制顯示的功能表命令,請使用CMFCMenuBar::SetShowAllCommands和CMFCMenuBar::SetRecentlyUsedMenus 方法。
CMFCMenuBar::IsShowAllCommandsDelay
指出 CMFCMenuBar 物件是否在短暫延遲之後顯示所有命令。
static BOOL IsShowAllCommandsDelay();
傳回值
如果功能表欄在短暫延遲後顯示完整功能表,則為非零;否則為 0。
備註
當您設定選單列以顯示最近使用的專案時,功能表列會以下列兩種方式之一顯示完整選單:
當使用者將游標停留在功能表底部的箭號上方時,在程式設計延遲之後顯示完整功能表。
在使用者單擊功能表底部的箭號之後,顯示完整功能表。
根據預設,所有物件都會 CMFCMenuBar
使用 選項,在短暫延遲之後顯示完整功能表。 這個選項無法在類別中 CMFCMenuBar
以程序設計方式變更。 不過,使用者可以使用 [ 自定義 ] 對話框,在工具列自定義期間變更行為。
CMFCMenuBar::LoadState
從 Windows 登錄載入功能表欄的狀態。
virtual BOOL LoadState(
LPCTSTR lpszProfileName = NULL,
int nIndex = -1,
UINT uiID = (UINT)-1);
參數
lpszProfileName
[in]包含 Windows 登錄機碼路徑的字串。
nIndex
[in]功能表欄的控件識別碼。
uiID
[in] 保留的值。
傳回值
如果方法成功,則為TRUE;否則為 FALSE。
備註
使用 CMFCMenuBar::SaveState 方法,將功能表欄的狀態儲存至登錄。 儲存的資訊包括功能表項、停駐狀態,以及功能表欄的位置。
在大部分情況下,您的應用程式不會呼叫 LoadState
。 架構會在初始化工作區時呼叫這個方法。
CMFCMenuBar::OnChangeHot
virtual void OnChangeHot(int iHot);
參數
[in] iHot
備註
CMFCMenuBar::OnDefaultMenuLoaded
架構從資源檔載入功能表資源時,會呼叫此方法。
virtual void OnDefaultMenuLoaded(HMENU hMenu);
參數
hMenu
[in]附加至 CMFCMenuBar
物件的功能表句柄。
備註
此函式的預設實作不做任何動作。 覆寫此函式,以在架構從資源檔載入功能表資源之後執行自定義程式代碼。
CMFCMenuBar::OnSendCommand
virtual BOOL OnSendCommand(const CMFCToolBarButton* pButton);
參數
[in] pButton
傳回值
備註
CMFCMenuBar::OnSetDefaultButtonText
當使用者變更功能表列上專案的文字時,架構會呼叫此方法。
virtual BOOL OnSetDefaultButtonText(CMFCToolBarButton* pButton);
參數
pButton
[in]使用者想要自定義之 CMFCToolBarButton 物件的指標。
傳回值
如果架構將用戶變更套用至功能表欄,則為TRUE;否則為 FALSE。
備註
此方法的預設實作會將按鈕的文字變更為使用者所提供的文字。
CMFCMenuBar::OnToolHitTest
virtual INT_PTR OnToolHitTest(
CPoint point,
TOOLINFO* pTI) const;
參數
[in] 點
[in] pTI
傳回值
備註
CMFCMenuBar::P reTranslateMessage
virtual BOOL PreTranslateMessage(MSG* pMsg);
參數
[in] pMsg
傳回值
備註
CMFCMenuBar::RestoreOriginalstate
當使用者從 [自定義] 對話框中選取 [重設] 時,由架構呼叫。
virtual BOOL RestoreOriginalstate();
傳回值
如果方法成功,則為非零;否則為 0。
備註
當使用者從自定義功能表中選取 [重設 ] 時,會呼叫這個方法。 您也可以手動呼叫此方法,以程序設計方式重設功能表欄的狀態。 這個方法會從資源檔載入原始狀態。
如果您想要在用戶選取 [重設 ] 選項時執行任何處理,請覆寫此方法。
CMFCMenuBar::SaveState
將 CMFCMenuBar 物件的狀態儲存至 Windows 登錄。
virtual BOOL SaveState (
LPCTSTR lpszProfileName = NULL,
int nIndex = -1,
UINT uiID = (UINT)-1);
參數
lpszProfileName
[in]包含 Windows 登錄機碼路徑的字串。
nIndex
[in]功能表欄的控件識別碼。
uiID
[in] 保留的值。
傳回值
如果成功,則為TRUE;否則為 FALSE;
備註
通常,您的應用程式不會呼叫 SaveState
。 架構會在串行化工作區時呼叫這個方法。 如需詳細資訊,請參閱 CWinAppEx::SaveState。
儲存的資訊包括功能表項、停駐狀態,以及功能表欄的位置。
CMFCMenuBar::SetDefaultMenuResId
根據資源標識碼設定 CMFCMenuBar 物件的預設功能表。
void SetDefaultMenuResId(UINT uiResId);
參數
uiResId
[in]新預設功能表的資源標識碼。
備註
CMFCMenuBar::RestoreOriginalstate 方法會從資源檔還原預設功能表。
使用 CMFCMenuBar::GetDefaultMenuResId 方法來擷取預設功能表而不還原它。
CMFCMenuBar::SetForceDownArrows
void SetForceDownArrows(BOOL bValue);
參數
[in] bValue
備註
CMFCMenuBar::SetMaximizeMode
當 MDI 變更其顯示模式,而且必須更新功能表欄時,架構會呼叫此方法。
void SetMaximizeMode(
BOOL bMax,
CWnd* pWnd = NULL,
BOOL bRecalcLayout = TRUE);
參數
bMax
[in]指定模式的布爾值。 如需詳細資訊,請參閱<備註>一節。
pWnd
[in]變更之 MDI 子視窗的指標。
bRecalcLayout
[in]布爾值,指定是否應立即重新計算功能表欄的配置。
備註
當 MDI 子視窗最大化時,附加至 MDI 主框架視窗的功能表欄會顯示系統選單和 [最小化]、 [最大化 ] 和 [關閉 ] 按鈕。 如果 bMax 為 TRUE 且 pWnd 不是 NULL,MDI 子視窗會最大化,而且功能表欄必須納入額外的控制件。 否則,功能表欄會回到其一般狀態。
CMFCMenuBar::SetMenuButtonRTC
設定當使用者建立功能表按鈕時,架構所使用的運行時間類別資訊。
void SetMenuButtonRTC(CRuntimeClass* pMenuButtonRTC);
參數
pMenuButtonRTC
[in]衍生自 CMFCMenuButton 類別之類別的 CRuntimeClass 資訊。
備註
當使用者將新按鈕新增至功能表欄時,架構會動態建立按鈕。 根據預設,它會建立 CMFCMenuButton
物件。 覆寫此方法以變更架構所建立的按鈕物件類型。
CMFCMenuBar::SetMenuFont
設定應用程式中所有功能表欄的字型。
static BOOL SetMenuFont(
LPLOGFONT lpLogFont,
BOOL bHorz = TRUE);
參數
lpLogFont
[in]LOGFONT 結構的指標,定義要設定的字型。
bHorz
[in]如果想要 將 lpLogFont 參數用於垂直字型,則為 TRUE,如果您想要將它用於水準字型,則為 FALSE。
傳回值
如果方法成功,則為TRUE;否則為 FALSE。
備註
所有物件都會使用 CMFCMenuBar
兩個字型。 這些個別字型用於水平和垂直功能表欄。
字型設定是全域變數,會影響所有 CMFCMenuBar
物件。
CMFCMenuBar::SetRecentlyUsedMenus
控制選單列是否顯示最近使用的功能表命令。
static void SetRecentlyUsedMenus (BOOL bOn = TRUE);
參數
邦
[in]布爾值,控制是否顯示最近使用的功能表命令。
CMFCMenuBar::SetShowAllCommands
控制選單是否顯示所有可用的命令。
static void SetShowAllCommands(BOOL bShowAllCommands = TRUE);
參數
bShowAllCommands
[in]布爾參數,指定快顯功能表是否顯示所有功能表命令。
備註
如果功能表未顯示所有功能表命令,則會隱藏很少使用的命令。 如需顯示功能表命令的詳細資訊,請參閱 CMFCMenuBar類別。