CMFCMenuBar 类
实现停靠的菜单栏。 有关详细信息,请参阅所安装的 Visual Studio 的 C\atlmfc\src\mfc 文件夹中的源代码。
语法
class CMFCMenuBar : public CMFCToolbar
成员
公共方法
备注
CMFCMenuBar
类是实现停靠功能的菜单栏。 这类似于工具栏,不过它无法关闭,始终处于显示状态。
CMFCMenuBar
支持显示最近使用的菜单项对象的选项。 如果启用此选项,则 CMFCMenuBar
在首次查看时仅显示一部分可用命令。 此后会显示最近使用的命令以及最初的那部分命令。 此外,用户始终可以展开菜单以查看所有可用的命令。 所以每个可用命令都被配置为始终显示或仅在最近选择时显示。
若要使用 CMFCMenuBar
对象,请将其嵌入主窗口框架对象。 处理 WM_CREATE
消息时,请调用 CMFCMenuBar::Create
或 CMFCMenuBar::CreateEx
方法。 无论使用哪个创建函数,都传入指向主框架窗口的指针。 然后通过调用 CFrameWndEx::EnableDocking 来实现停靠功能。 通过调用 CFrameWndEx::DockPane 来停靠此菜单。
示例
下面的示例演示了如何使用 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] 菜单栏的子窗口 ID。
返回值
若成功,则为 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] 菜单栏的子窗口 ID。
返回值
如果此方法成功,返回值为非零;否则返回值是 0。
备注
若想指定除工具栏样式之外的样式,应使用此函数而不是 CMFCMenuBar::Create。 一些经常使用的其他样式有 TBSTYLE_TRANSPARENT 和 CBRS_TOP。
有关其他样式的列表,请参阅工具栏控件和按钮样式、常用控件样式和常见窗口样式。
示例
下面的示例演示如何使用 CMFCMenuBar
类的 CreateEx
方法。 此代码片段是 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 对象。 此方法在 HMENU 参数后对 CMFCMenuBar
对象进行建模。
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] “帮助”组合框按钮的命令 ID。
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] 菜单栏的控件 ID。
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] point
[in] pTI
返回值
备注
CMFCMenuBar::PreTranslateMessage
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] 菜单栏的控件 ID。
uiID
[in] 保留值。
返回值
若成功,则为 TRUE;否则为 FALSE;
备注
通常应用程序不会调用 SaveState
。 框架在初始化工作区时调用此方法。 有关详细信息,请参阅 CWinAppEx::SaveState。
保存的信息包括菜单项、停靠状态和菜单栏的位置。
CMFCMenuBar::SetDefaultMenuResId
根据资源 ID 设置 CMFCMenuBar 对象的默认菜单。
void SetDefaultMenuResId(UINT uiResId);
参数
uiResId
[in] 新默认菜单的资源 ID。
备注
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);
参数
bOn
[in] 一个布尔值,用于控制是否显示最近使用的菜单命令。
CMFCMenuBar::SetShowAllCommands
控制菜单是否显示所有可用的命令。
static void SetShowAllCommands(BOOL bShowAllCommands = TRUE);
参数
bShowAllCommands
[in] 一个布尔参数,指定弹出菜单是否显示所有菜单命令。
备注
如果菜单不显示所有菜单命令,将隐藏很少使用的命令。 有关显示菜单命令的详细信息,请参阅 CMFCMenuBar 类。