CMFCPopupMenu 类
实现 Windows 弹出菜单功能,并通过添加可拖曳菜单和工具提示等功能进行扩展。 有关详细信息,请参阅所安装的 Visual Studio 的 C\atlmfc\src\mfc 文件夹中的源代码。
语法
class CMFCPopupMenu : public CMiniFrameWnd
成员
受保护构造函数
名称 | 描述 |
---|---|
CMFCPopupMenu::CMFCPopupMenu | 构造 CMFCPopupMenu 对象。 |
公共方法
受保护方法
名称 | 描述 |
---|---|
CMFCPopupMenu::CreateTearOffBar | |
CMFCPopupMenu::OnChangeHot | |
CMFCPopupMenu::OnChooseItem |
备注
通常,MFC 会自动创建弹出菜单。 如果要手动创建 CMFCPopupMenu
对象,请在堆上分配一个对象,然后调用 CMFCPopupMenu::Create。
示例
以下示例演示如何配置弹出菜单对象。 该示例演示如何设置弹出菜单的徽标和声音,设置动画速度和类型,在弹出菜单出现在主框架外时绘制菜单阴影,设置最大宽度,以及设置弹出菜单的右对齐方式。 此代码片段属于自定义页面示例。
// 30 is the size of the logo in pixels.
pPopupMenu->EnableMenuLogo(30);
pPopupMenu->EnableMenuSound();
// 500 is the animation speed in milliseconds.
pPopupMenu->SetAnimationSpeed(500);
pPopupMenu->SetAnimationType(CMFCPopupMenu::SLIDE);
pPopupMenu->SetForceShadow(true);
// 200 is the maximum width of the pop-up menu in pixels.
pPopupMenu->SetMaxWidth(200);
pPopupMenu->SetRightAlign();
pPopupMenu->InsertSeparator();
继承层次结构
CMFCPopupMenu
要求
标头:afxpopupmenu.h
CMFCPopupMenu::ActivatePopupMenu
static BOOL __stdcall ActivatePopupMenu(
CFrameWnd* pTopFrame,
CMFCPopupMenu* pPopupMenu);
参数
[in] pTopFrame
[in] pPopupMenu
返回值
注解
CMFCPopupMenu::AlwaysShowEmptyToolsEntry
设置是否启用弹出菜单以显示用户定义的工具的空条目。
static void AlwaysShowEmptyToolsEntry(BOOL bShow = TRUE);
参数
bShow
[in] 如果弹出菜单可显示空条目,则为 TRUE;否则为 FALSE。
CMFCPopupMenu::AreAllCommandsShown
BOOL AreAllCommandsShown() const;
返回值
备注
CMFCPopupMenu::CheckArea
确定相对于弹出菜单的点的位置。
MENUAREA_TYPE CheckArea(const CPoint& ptScreen) const;
参数
ptScreen
[in] 一个点,用屏幕坐标表示。
返回值
一个 MENUAREA_TYPE 参数,指示点相对于弹出菜单的位置。
注解
MENUAREA_TYPE 参数可采用下列任一值。
OUTSIDE - ptScreen 位于弹出菜单外部。
LOGO - ptScreen 位于徽标区域。
TEAROFF_CAPTION - ptScreen 位于拖曳式标题上方。
SHADOW_BOTTOM - ptScreen 位于弹出菜单的底部阴影上方。
SHADOW_RIGHT - ptScreen 位于弹出菜单的右侧阴影上方。
MENU - ptScreen 位于命令上方。
CMFCPopupMenu::CloseMenu
void CloseMenu(BOOL bSetFocusToBar = FALSE);
参数
[in] bSetFocusToBar
备注
CMFCPopupMenu::CMFCPopupMenu
构造 CMFCPopupMenu 对象。
CMFCPopupMenu(
CMFCToolBarsMenuPropertyPage* pCustPage,
LPCTSTR lpszTitle);
参数
pCustPage
[in] 指向自定义页的指针。
lpszTitle
[in] 包含菜单标题的字符串。
注解
此方法为 CMFCPopupMenu
分配资源。 若要创建弹出菜单项,请调用 CMFCPopupMenu::Create。
CMFCPopupMenu::Create
创建弹出菜单并将其附加到 CMFCPopupMenu 对象。
virtual BOOL Create(
CWnd* pWndParent,
int x,
int y,
HMENU hMenu,
BOOL bLocked = FALSE,
BOOL bOwnMessage = FALSE);
参数
pWndParent
[in] CMFCPopupMenu
的父窗口。
x
[in] 弹出菜单位置的水平屏幕坐标
y
[in] 弹出菜单位置的垂直屏幕坐标。
hMenu
[in] 菜单资源的句柄。
bLocked
[in] 一个布尔参数,指示菜单是否可自定义。 FALSE 表示弹出菜单可自定义。
bOwnMessage
[in] 一个布尔参数,指示框架如何路由菜单消息。 有关更多详细信息,请参阅“备注”部分。
返回值
如果此方法成功,则为 TRUE;否则为 FALSE。
备注
如果 bOwnMessage 为 TRUE,则框架会将任何菜单消息路由到 pWndParent。 如果 bOwnMessage 为 TRUE,则 pWndParent 不得为 NULL。 如果 bOwnMessage 为 FALSE,框架会将菜单消息路由到父级弹出菜单。
示例
下面的示例演示如何使用 CMFCPopuMenu
类的 Create
方法。 此代码片段属于自定义页面示例。
CMFCPopupMenu *pPopupMenu = new CMFCPopupMenu;
// CPoint point
// CMenu* pPopup
// The this pointer points to CMainFrame class which extends the CFrameWnd class.
pPopupMenu->Create(this, point.x, point.y, pPopup->Detach());
CMFCPopupMenu::CreateTearOffBar
virtual CPane* CreateTearOffBar(
CFrameWnd* pWndMain,
UINT uiID,
LPCTSTR lpszName);
参数
[in] pWndMain
[in] uiID
[in] lpszName
返回值
注解
CMFCPopupMenu::DefaultMouseClickOnClose
virtual BOOL DefaultMouseClickOnClose() const;
返回值
备注
CMFCPopupMenu::EnableMenuLogo
初始化弹出菜单的徽标。
void EnableMenuLogo(
int iLogoSize,
LOGO_LOCATION nLogoLocation = MENU_LOGO_LEFT);
参数
iLogoSize
[in] 徽标的大小(以像素为单位)。
nLogoLocation
[in] 指示徽标位置的枚举数据类型。
备注
若要显示徽标,请在主框架窗口中实现 CFrameWndEx::OnDrawMenuLogo 方法。
nLogoLocation 的可能值为 MENU_LOGO_LEFT、MENU_LOGO_RIGHT、MENU_LOGO_TOP 和 MENU_LOGO_BOTTOM。
CMFCPopupMenu::EnableMenuSound
启用菜单声音。
static void EnableMenuSound(BOOL bEnable = TRUE);
参数
bEnable
[in] 若要启用声音,则为 TRUE;否则为 FALSE。
注解
如果启用声音,框架会在用户打开弹出菜单或选择菜单命令时调用 PlaySound 方法。 此功能默认启用。
CMFCPopupMenu::EnableResize
void EnableResize(CSize sizeMinResize);
参数
[in] sizeMinResize
备注
CMFCPopupMenu::EnableScrolling
void EnableScrolling(BOOL = TRUE);
参数
[in] BOOL
注解
CMFCPopupMenu::EnableVertResize
void EnableVertResize(int nMinResize);
参数
[in] nMinResize
注解
CMFCPopupMenu::FindSubItemByCommand
CMFCToolBarMenuButton* FindSubItemByCommand(UINT uiCmd) const;
参数
[in] uiCmd
返回值
备注
CMFCPopupMenu::GetActiveMenu
返回当前活动菜单。
static CMFCPopupMenu* GetActiveMenu();
返回值
指向活动弹出菜单的指针;如果没有弹出菜单当前处于活动状态,则为 NULL。
注解
每个应用程序最多可以有一个活动弹出菜单。
CMFCPopupMenu::GetAnimationSpeed
返回弹出菜单的动画速度。
static UINT GetAnimationSpeed();
返回值
一个整数,指示完成弹出菜单动画所需的时间(以毫秒为单位)。
备注
动画速度是一个全局值。 使用 CMFCPopupMenu::SetAnimationSpeed 更改弹出菜单的动画速度。
CMFCPopupMenu::GetAnimationType
返回弹出动画的当前类型。
static CMFCPopupMenu::ANIMATION_TYPE GetAnimationType(BOOL bNoSystem = FALSE);
参数
bNoSystem
[in] 一个布尔参数,指示此方法是否检查全局值。 如果希望此方法返回 CMFCPopupMenu 类实例的动画样式,则为 FALSE。
返回值
描述动画类型的枚举值。
备注
弹出菜单的动画样式对应用程序来说是一个全局值。 使用 CMFCPopupMenu::SetAnimationType 设置动画样式。
下表列出了可能的动画类型。
值 | 说明 |
---|---|
NO_ANIMATION | 弹出菜单未进行动画处理,并立即显示。 |
UNFOLD | 框架显示从左上角到右下角的弹出菜单。 |
SLIDE | 弹出菜单从上到下移动。 |
FADE | 弹出菜单首先是透明的,并逐渐纯色显示。 |
CMFCPopupMenu::GetDropDirection
DROP_DIRECTION GetDropDirection() const;
返回值
备注
CMFCPopupMenu::GetForceMenuFocus
指示在显示弹出菜单时焦点是否返回到菜单栏。
static BOOL GetForceMenuFocus();
返回值
如果在显示弹出菜单时输入焦点返回到菜单栏,则为 TRUE;如果弹出菜单保留焦点,则为 FALSE。
注解
默认情况下,应用程序不会将焦点返回到菜单栏。 若要更改此设置,请使用 CMFCPopupMenu::SetForceMenuFocus。
CMFCPopupMenu::GetForceShadow
static BOOL __stdcall GetForceShadow();
返回值
注解
CMFCPopupMenu::GetHMenu
返回附加菜单资源的句柄。
HMENU GetHMenu();
CMFCPopupMenu::GetMenuBar
返回嵌入在弹出菜单中的 CMFCPopupMenuBar。
virtual CMFCPopupMenuBar* GetMenuBar();
返回值
指向嵌入的 CMFCPopupMenuBar
的指针。
备注
弹出菜单具有嵌入的 CMFCPopupMenuBar
对象。 如果使用其他嵌入类,则必须在派生类中替代此方法。
CMFCPopupMenu::GetMenuItem
返回指向指定索引处的菜单项的指针。
CMFCToolBarMenuButton* GetMenuItem(int iIndex) const;
参数
iIndex
[in] 菜单项的从零开始的索引。
返回值
指向菜单项的指针。 如果索引无效,则返回 NULL。
注解
菜单项由 CMFCToolBarMenuButton 类表示。 调用此方法时,它将返回指向相应 CMFCToolBarMenuButton
的指针。
CMFCPopupMenu::GetMenuItemCount
返回弹出菜单中的项数。
int GetMenuItemCount() const;
返回值
菜单中的项数。
CMFCPopupMenu::GetMessageWnd
返回指向框架路由弹出菜单消息的窗口的指针。
CWnd* GetMessageWnd() const;
返回值
指向接收弹出菜单消息的窗口的指针;如果没有窗口,则为 NULL。
备注
使用 CMFCPopupMenu::Create 方法创建弹出菜单时,可以指定接收菜单消息的窗口。
CMFCPopupMenu::GetParentArea
virtual CWnd* GetParentArea(CRect& rectParentBtn);
参数
[in] rectParentBtn
返回值
注解
CMFCPopupMenu::GetParentButton
返回指向父级工具栏按钮的指针。
CMFCToolBarMenuButton* GetParentButton() const;
返回值
指向父级工具栏按钮的指针。 如果弹出菜单没有父级工具栏按钮,则为 NULL。
备注
CMFCPopupMenu
可与菜单上的按钮关联。 在此情况下,当用户选择父级工具栏按钮时,将显示弹出菜单。
如果弹出菜单是快捷菜单,则它没有父级工具栏按钮。
CMFCPopupMenu::GetParentPopupMenu
返回指向父级弹出菜单的指针。
CMFCPopupMenu* GetParentPopupMenu() const;
返回值
指向父级 CMFCPopupMenu
对象的指针;如果没有父级弹出菜单,则为 NULL。
注解
仅当弹出菜单是子菜单时,弹出菜单才具有父级 CMFCPopupMenu
对象。
CMFCPopupMenu::GetParentRibbonElement
CMFCRibbonBaseElement* GetParentRibbonElement() const;
返回值
注解
CMFCPopupMenu::GetParentToolBar
返回指向父级工具栏的指针。
CMFCToolBar* GetParentToolBar() const;
返回值
指向父工具栏的指针。 如果弹出菜单没有父工具栏,则为 NULL。
注解
如果 CMFCPopupMenu
是快捷菜单,则它没有父工具栏。
CMFCPopupMenu::GetQuickCustomizeType
QUICK_CUSTOMIZE_TYPE GetQuickCustomizeType() const;
返回值
备注
CMFCPopupMenu::GetSelItem
返回指向当前所选菜单命令的指针。
CMFCToolBarMenuButton* GetSelItem();
返回值
指向当前所选菜单命令的指针;如果未选择任何项,则为 NULL。
备注
弹出菜单上的菜单命令由 CMFCToolBarMenuButton 类或派生自 CMFCToolBarMenuButton
的类表示。
CMFCPopupMenu::HasBeenResized
BOOL HasBeenResized() const;
返回值
备注
CMFCPopupMenu::HideRarelyUsedCommands
指示弹出菜单是否可隐藏很少使用的命令。
BOOL HideRarelyUsedCommands() const;
返回值
如果弹出菜单可隐藏很少使用的命令,则为 TRUE;否则为 FALSE。
备注
此方法仅指定弹出菜单是否可隐藏很少使用的命令,而不是是否启用该配置。 如果弹出菜单具有父按钮且父窗口派生自 CMFCMenuBar 类,则弹出菜单可以隐藏很少使用的命令。 使用 CMFCMenuBar::SetRecentlyUsedMenus 启用此功能,使用 CMFCMenuBar::IsRecentlyUsedMenus 来确定此功能当前是否已启用。 必须为父窗口调用这两种方法。
CMFCPopupMenu::InCommand
virtual BOOL InCommand();
返回值
注解
CMFCPopupMenu::InsertItem
将新项插入到指定位置的弹出菜单中。
int InsertItem(
const CMFCToolBarMenuButton& button,
int iInsertA = -1);
参数
按钮
[in] 对要添加的菜单项的引用。
iInsertAt
[in] 新项的从零开始的索引。 如果 iInsertAt 为 -1,则该项将添加到菜单末尾。
返回值
插入项的位置的从零开始的索引。 如果方法失败,则为 -1。
备注
如果为 iInsertAt 提供无效值,例如大于弹出菜单上当前项数的整数,此方法将失败。
CMFCPopupMenu::InsertSeparator
将分隔符插入到指定位置的弹出菜单中。
int InsertSeparator(int iInsertAt = -1);
参数
iInsertAt
[in] 此方法将插入分隔符的位置的从零开始的索引。
返回值
插入分隔符的位置的从零开始的索引。 如果此方法失败,则为 -1。
备注
如果 iInsertAt 的值为 -1,则表示此方法会将分隔符添加到弹出菜单的末尾。
如果 iInsertAt 是无效值,此方法将失败。
CMFCPopupMenu::IsAlwaysClose
virtual BOOL IsAlwaysClose() const;
返回值
注解
CMFCPopupMenu::IsAlwaysShowEmptyToolsEntry
static BOOL __stdcall IsAlwaysShowEmptyToolsEntry();
返回值
注解
CMFCPopupMenu::IsCustomizePane
指示弹出菜单是否等效于 QuickCustomizePane。
BOOL IsCustomizePane();
返回值
如果弹出窗口为 QuckCustomizePane,则为 TRUE;否则为 FALSE。
备注
使用 QuickCustomizePane 使用户能够直接自定义弹出菜单。 QuickCustomizePane 是一个 CMFCPopupMenu
,当用户单击工具栏按钮来直接编辑它时显示。
应用程序应在 CMDIFrameWndEx::OnShowCustomizePane 期间调用此方法。
CMFCPopupMenu::IsEscClose
BOOL IsEscClose();
返回值
注解
CMFCPopupMenu::IsIdle
指示弹出菜单当前是否处于空闲状态。
virtual BOOL IsIdle() const;
返回值
如果弹出菜单处于空闲模式,则为 TRUE;否则为 FALSE。
备注
默认情况下,如果显示动画已完成且用户未滚动弹出菜单,则弹出菜单处于空闲模式。
CMFCPopupMenu::IsMenuSound
static UINT __stdcall IsMenuSound();
返回值
备注
CMFCPopupMenu::IsQuickCustomize
确定关联的 CMFCToolBarMenuButton Class 是否处于 QuickCustomize 模式。
BOOL IsQuickCustomize();
返回值
如果关联的菜单按钮处于 QuickCustomize 模式,则为 TRUE;否则为 FALSE。 如果弹出菜单未与 CMFCToolBarMenuButton
关联,此方法也会返回 FALSE。
备注
在 QuickCustomize 模式下,用户选择工具栏上的按钮来直接自定义该按钮。
CMFCPopupMenu::IsResizeble
BOOL IsResizeble() const;
返回值
备注
CMFCPopupMenu::IsRightAlign
指示菜单是右对齐还是左对齐。
BOOL IsRightAlign() const;
返回值
如果菜单右对齐,则为 TRUE;如果菜单左对齐,则为 FALSE。
备注
可使用 CMFCPopupMenu::SetRightAlign 设置菜单的对齐方式。 默认情况下,弹出菜单使用左对齐方式。
菜单对齐不是全局设置,可能因弹出菜单而异。
CMFCPopupMenu::IsScrollable
BOOL IsScrollable() const;
返回值
备注
CMFCPopupMenu::IsSendMenuSelectMsg
指示当用户从弹出菜单中选择命令时框架是否通知父框架。
static BOOL IsSendMenuSelectMsg();
返回值
如果框架通知父框架,则为 TRUE;否则为 FALSE。
备注
在用户选择菜单命令时,框架通过向父框架发送 WM_MENUSELECT 消息来通知该框架。
CMFCPopupMenu::IsShown
指示弹出菜单当前是否可见。
BOOL IsShown() const;
返回值
如果弹出菜单可见,则为 TRUE;否则为 FALSE。
CMFCPopupMenu::MoveTo
void MoveTo(const CPoint& pt);
参数
[in] pt
备注
CMFCPopupMenu::OnChangeHot
virtual void OnChangeHot(int nHot);
参数
[in] nHot
注解
CMFCPopupMenu::OnChooseItem
virtual void OnChooseItem(UINT uidCmdID);
参数
[in] uidCmdID
注解
CMFCPopupMenu::OnCmdMsg
virtual BOOL OnCmdMsg(
UINT nID,
int nCode,
void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
参数
[in] nID
[in] nCode
[in] pExtra
[in] pHandlerInfo
返回值
备注
CMFCPopupMenu::PostCommand
BOOL PostCommand(UINT uiCommandID);
参数
[in] uiCommandID
返回值
注解
CMFCPopupMenu::PreTranslateMessage
virtual BOOL PreTranslateMessage(MSG* pMsg);
参数
[in] pMsg
返回值
备注
CMFCPopupMenu::RecalcLayout
virtual void RecalcLayout(BOOL bNotify = TRUE);
参数
[in] bNotify
备注
CMFCPopupMenu::RemoveAllItems
从弹出菜单中清除所有项。
void RemoveAllItems();
CMFCPopupMenu::RemoveItem
从弹出菜单中移除指定项。
BOOL RemoveItem(int iIndex);
参数
iIndex
[in] 要删除的项的从零开始的索引。
返回值
如果此方法成功,则为 TRUE;否则为 FALSE。
备注
此方法会自动排列受删除项影响的任何分隔符。 若要详细了解框架如何重新排列分隔符,请参阅 CMFCToolBar::RemoveButton。
CMFCPopupMenu::SaveState
virtual void SaveState();
备注
CMFCPopupMenu::SetAnimationSpeed
设置弹出菜单的动画速度。
static void SetAnimationSpeed(UINT nElapse);
参数
nElapse
[in] 新的动画速度(以毫秒为单位)。
备注
动画速度是一个全局值,会影响应用程序中的所有弹出菜单。 此值指定完成弹出菜单动画所需的时间。
默认情况下,该参数设置为 30 毫秒。 nElapse 的有效值介于 0 到 200 之间。
CMFCPopupMenu::SetAnimationType
设置此弹出菜单的动画类型。
static void SetAnimationType(CMFCPopupMenu::ANIMATION_TYPE type);
参数
type
[in] 一个指定动画类型的枚举数据类型。
备注
有关类型的有效值列表,请参阅 CMFCPopupMenu::GetAnimationType。
CMFCPopupMenu::SetAutoDestroy
void SetAutoDestroy(BOOL bAutoDestroy = TRUE);
参数
[in] bAutoDestroy
备注
CMFCPopupMenu::SetDefaultItem
设置弹出菜单的默认命令。
void SetDefaultItem(UINT uiCmd);
参数
uiCmd
[in] 新的默认命令的菜单命令 ID。
备注
弹出菜单中的默认命令是弹出菜单出现时选择的命令。
CMFCPopupMenu::SetForceMenuFocus
当显示弹出菜单时,强制输入焦点返回到菜单栏。
static void SetForceMenuFocus(BOOL bValue);
参数
bValue
[in] 如果希望框架在显示弹出菜单时强制输入焦点回到菜单栏,则为 TRUE。 如果希望弹出菜单保留焦点,则为 FALSE。
备注
此方法会设置一个标志,它是应用程序中所有弹出菜单的全局标志。 默认情况下,未启用此功能。
CMFCPopupMenu::SetForceShadow
当弹出菜单出现在主框架外时,强制框架绘制菜单阴影。
static void SetForceShadow(BOOL bValue);
参数
bValue
[in] 如果希望框架绘制菜单阴影,则为 TRUE;否则为 FALSE。
备注
调用此方法时,它会在应用程序中设置全局标志。 此标志会影响应用程序中的所有弹出菜单。
CMFCPopupMenu::SetMaxWidth
设置弹出菜单的最大宽度。
void SetMaxWidth(int iMaxWidth);
参数
iMaxWidth
[in] 弹出菜单的最大宽度(以像素为单位)。
备注
如果与菜单命令关联的文本超出最大宽度,则会截断该文本,且超出的部分替换为三个点。
CMFCPopupMenu::SetMessageWnd
void SetMessageWnd(CWnd* pMsgWnd);
参数
[in] pMsgWnd
备注
CMFCPopupMenu::SetParentRibbonElement
void SetParentRibbonElement(CMFCRibbonBaseElement* pElem);
参数
[in] pElem
备注
CMFCPopupMenu::SetQuickCustomizeType
void SetQuickCustomizeType(QUICK_CUSTOMIZE_TYPE Type);
参数
[in] Type
备注
CMFCPopupMenu::SetQuickMode
void SetQuickMode();
备注
CMFCPopupMenu::SetRightAlign
设置弹出菜单的菜单对齐方式。
void SetRightAlign(BOOL bRightAlign = TRUE);
参数
bRightAlign
[in] 一个指示菜单对齐方式的布尔值。 TRUE 表示右对齐,FALSE 表示左对齐。
备注
默认情况下,所有弹出菜单都左对齐。
CMFCPopupMenu::SetSendMenuSelectMsg
设置一个标志,用于控制当用户选择命令时弹出菜单是否通知其父框架。
static void SetSendMenuSelectMsg(BOOL bSet = TRUE);
参数
bSet
[in] 如果弹出菜单通知其父框架,则为 TRUE;否则为 FALSE。
注解
这是应用程序中所有弹出菜单的全局选项。 如果启用,弹出菜单将在用户选择命令时将 WM_MENUSELECT 消息发送到父框架。
CMFCPopupMenu::ShowAllCommands
强制弹出菜单显示所有命令。
void ShowAllCommands();
备注
这不是全局设置,仅影响当前弹出菜单。
CMFCPopupMenu::TriggerResize
void TriggerResize();
备注
CMFCPopupMenu::UpdateAllShadows
更新所有打开的弹出菜单的阴影。
static void UpdateAllShadows(LPRECT lprectScreen = NULL);
参数
lprectScreen
[in] 一个矩形,指定要更新的区域(用屏幕坐标表示)。
注解
当弹出菜单显示在动画控件或具有动态内容的其他窗口上时,此方法非常有用。
CMFCPopupMenu::UpdateShadow
更新弹出菜单的阴影。
void UpdateShadow(LPRECT lprectScreen = NULL);
参数
lprectScreen
[in] 一个矩形,指定要更新的区域的边界(用屏幕坐标表示)。
备注
当具有阴影的弹出菜单与动画图像重叠时,调用此方法。