CContextMenuManager 类

CContextMenuManager 对象管理快捷菜单(也称为上下文菜单)。

语法

class CContextMenuManager : public CObject

成员

公共构造函数

名称 描述
CContextMenuManager::CContextMenuManager 构造 CContextMenuManager 对象。
CContextMenuManager::~CContextMenuManager 析构函数。

公共方法

名称 描述
CContextMenuManager::AddMenu 添加新的快捷菜单。
CContextMenuManager::GetMenuById 返回与所提供资源 ID 关联的菜单的句柄。
CContextMenuManager::GetMenuByName 返回与所提供菜单名称匹配的菜单的句柄。
CContextMenuManager::GetMenuNames 返回菜单名称的列表。
CContextMenuManager::LoadState 加载存储在 Windows 注册表中的快捷菜单。
CContextMenuManager::ResetState 从上下文菜单管理器中清除快捷菜单。
CContextMenuManager::SaveState 将快捷菜单保存到 Windows 注册表。
CContextMenuManager::SetDontCloseActiveMenu 控制 CContextMenuManager 在显示新快捷菜单时是否关闭活动快捷菜单。
CContextMenuManager::ShowPopupMenu 显示指定的快捷菜单。
CContextMenuManager::TrackPopupMenu 显示指定的快捷菜单。 返回所选菜单命令的索引。

备注

CContextMenuManager 管理快捷菜单,并确保其外观一致。

不应手动创建 CContextMenuManager 对象。 应用程序的框架创建 CContextMenuManager 对象。 但是,在初始化应用程序时,应调用 CWinAppEx::InitContextMenuManager。 初始化上下文管理器后,使用方法 CWinAppEx::GetContextMenuManager 获取指向应用程序的上下文管理器的指针。

可以通过调用 AddMenu 在运行时创建快捷菜单。 如果要在不先接收用户输入的情况下显示菜单,请调用 ShowPopupMenu。 当你希望创建菜单并等待用户输入时,请使用 TrackPopupMenuTrackPopupMenu 返回所选命令的索引,如果用户未选择任何内容就退出,则返回 0。

CContextMenuManager 还可以将其状态保存并加载到 Windows 注册表中。

示例

以下示例演示如何将菜单添加到 CContextMenuManager 对象,以及如何在 CContextMenuManager 对象显示新的弹出菜单时不关闭活动的弹出菜单。 此代码片段属于自定义页面示例

// The GetContextMenuManager method is inherited from the CWinAppEx class.
GetContextMenuManager()->AddMenu(_T("My menu"), IDR_CONTEXT_MENU);
GetContextMenuManager()->SetDontCloseActiveMenu(true);

继承层次结构

CObject

CContextMenuManager

要求

标头:afxcontextmenumanager.h

CContextMenuManager::AddMenu

将新的快捷菜单添加到 CContextMenuManager

BOOL AddMenu(
    UINT uiMenuNameResId,
    UINT uiMenuResId);

BOOL AddMenu(
    LPCTSTR lpszName,
    UINT uiMenuResId);

参数

uiMenuNameResId
[in] 包含新菜单名称的字符串的资源 ID。

uiMenuResId
[in] 菜单资源 ID。

lpszName
[in] 包含新菜单名称的字符串。

返回值

如果方法成功,则为非零;如果方法失败,则为 0。

备注

如果 uiMenuResId 无效或另一个同名菜单已在 CContextMenuManager 中,则此方法失败

CContextMenuManager::CContextMenuManager

构造 CContextMenuManager 对象。

CContextMenuManager();

备注

在大多数情况下,不应手动创建 CContextMenuManager。 应用程序的框架创建 CContextMenuManager 对象。 应该在应用程序初始化期间调用 CWinAppEx::InitContextMenuManager。 若要获取指向上下文管理器的指针,请调用 CWinAppEx::GetContextMenuManager

CContextMenuManager::GetMenuById

返回与给定资源 ID 关联的菜单的句柄。

HMENU GetMenuById(UINT nMenuResId) const;

参数

nMenuResId
[in] 菜单的资源 ID。

返回值

关联菜单的句柄,如果未找到菜单,则为 NULL

CContextMenuManager::GetMenuByName

返回特定菜单的句柄。

HMENU GetMenuByName(
    LPCTSTR lpszName,
    UINT* puiOrigResID = NULL) const;

参数

lpszName
[in] 包含要检索的菜单名称的字符串。

puiOrigResID
[out] 指向 UINT 的指针。 此参数包含指定菜单的资源 ID(如果找到)。

返回值

与 lpszName 指定的名称匹配的菜单句柄。 如果没有名为 lpszName 的菜单,则为 NULL

备注

如果此方法找到与 lpszName 匹配的菜单,则 GetMenuByName 将菜单资源 ID 存储在参数 puiOrigResID 中

CContextMenuManager::GetMenuNames

返回添加到 CContextMenuManager 的菜单名称列表。

void GetMenuNames(CStringList& listOfNames) const;

参数

listOfNames
[out] 对 CStringList 参数的引用。 此方法将菜单名称列表写入此参数。

CContextMenuManager::LoadState

从 Windows 注册表加载与 CContextMenuManager 类关联的信息。

virtual BOOL LoadState(LPCTSTR lpszProfileName = NULL);

参数

lpszProfileName
[in] 包含注册表键相对路径的字符串。

返回值

如果此方法成功,返回值为非零;否则返回值是 0。

备注

lpszProfileName 参数不是注册表项的绝对路径。 它是添加到应用程序默认注册表项末尾的相对路径。 若要获取或设置默认注册表项,请分别使用方法 CWinAppEx::GetRegistryBaseCWinAppEx::SetRegistryBase

使用方法 CContextMenuManager::SaveState 将快捷菜单保存到注册表。

CContextMenuManager::ResetState

从与 CContextMenuManager 类关联的快捷菜单中清除所有项。

virtual BOOL ResetState();

返回值

如果方法成功,则为 TRUE;如果发生故障,则为 FALSE。

注解

此方法清除弹出菜单,并从 CContextMenuManager 中将其删除。

CContextMenuManager::SaveState

将与 CContextMenuManager 类关联的信息保存到 Windows 注册表。

virtual BOOL SaveState(LPCTSTR lpszProfileName = NULL);

参数

lpszProfileName
[in] 包含注册表键相对路径的字符串。

返回值

如果此方法成功,返回值为非零;否则返回值是 0。

注解

lpszProfileName 参数不是注册表项的绝对路径。 它是添加到应用程序默认注册表项末尾的相对路径。 若要获取或设置默认注册表项,请分别使用方法 CWinAppEx::GetRegistryBaseCWinAppEx::SetRegistryBase

使用方法 CContextMenuManager::LoadState 从注册表加载快捷菜单。

CContextMenuManager::SetDontCloseActiveMenu

控制 CContextMenuManager 在显示新的弹出菜单时是否关闭活动的弹出菜单。

void SetDontCloseActiveMenu (BOOL bSet = TRUE);

参数

bSet
[in] 一个布尔参数,控制是否关闭活动的弹出菜单。 TRUE 值表示活动的弹出菜单未关闭。 FALSE 表示活动的弹出菜单已关闭。

注解

默认情况下,CContextMenuManager 关闭活动的弹出菜单。

CContextMenuManager::ShowPopupMenu

显示指定的快捷菜单。

virtual BOOL ShowPopupMenu(
    UINT uiMenuResId,
    int x,
    int y,
    CWnd* pWndOwner,
    BOOL bOwnMessage = FALSE,
    BOOL bRightAlign = FALSE);

virtual CMFCPopupMenu* ShowPopupMenu(
    HMENU hmenuPopup,
    int x,
    int y,
    CWnd* pWndOwner,
    BOOL bOwnMessage = FALSE,
    BOOL bAutoDestroy = TRUE,
    BOOL bRightAlign = FALSE);

参数

uiMenuResId
[in] 此方法将显示的菜单的资源 ID。

x
[in] 客户端坐标中快捷菜单的水平偏移。

y
[in] 客户端坐标中快捷菜单的垂直偏移

pWndOwner
[in] 指向快捷菜单的父窗口的指针。

bOwnMessage
[in] 指示消息路由方式的布尔参数。 如果 bOwnMessage 为 FALSE,则使用标准 MFC 路由。 否则,pWndOwner 接收消息

hmenuPopup
[in] 此方法将显示的菜单句柄。

bAutoDestroy
[in] 一个布尔参数,指示是否自动销毁菜单。

bRightAlign
[in] 一个布尔参数,指示菜单项的对齐方式。 如果 bRightAlign 为 TRUE,则菜单按从右到左的读取顺序向右对齐

返回值

如果方法成功显示菜单,则第一个方法重载返回非零;否则为 0。 如果快捷菜单显示正确,则第二个方法重载返回指向 CMFCPopupMenu 的指针;否则为 NULL。

备注

此方法类似于方法 CContextMenuManager::TrackPopupMenu,因为这两种方法都显示快捷菜单。 不过,TrackPopupMenu 返回所选菜单命令的索引。

如果参数 bAutoDestroy 为 FALSE,则必须手动调用继承的 DestroyMenu 方法以释放内存资源ShowPopupMenu 的默认实现不使用参数 bAutoDestroy。 它供将来使用或 CContextMenuManager 类派生的自定义类使用。

CContextMenuManager::TrackPopupMenu

显示指定的快捷菜单并返回所选快捷菜单命令的索引。

virtual UINT TrackPopupMenu(
    HMENU hmenuPopup,
    int x,
    int y,
    CWnd* pWndOwner,
    BOOL bRightAlign = FALSE);

参数

hmenuPopup
[in] 此方法显示的快捷菜单的句柄。

x
[in] 客户端坐标中快捷菜单的水平偏移。

y
[in] 客户端坐标中快捷菜单的垂直偏移。

pWndOwner
[in] 指向快捷菜单的父窗口的指针。

bRightAlign
[in] 一个布尔参数,指示菜单项的对齐方式。 如果 bRightAlign 为 TRUE,则菜单按从右到左的读取顺序向右对齐。 如果 bRightAlign 为 FALSE,则菜单按从左到右的阅读顺序进行左对齐

返回值

用户选择的命令的菜单命令 ID;如果用户在未选择菜单命令的情况下关闭快捷菜单,则为 0。

注解

此方法用作显示快捷菜单的模式调用。 在用户关闭快捷菜单或选择命令之前,应用程序不会继续执行以下代码行。 可用于显示快捷菜单的替代方法是 CContextMenuManager::ShowPopupMenu。 该方法不是模式调用,不会返回所选命令的 ID。

另请参阅

层次结构图

CWinAppEx 类