CContextMenuManager Class
The CContextMenuManager
object manages shortcut menus, also known as context menus.
Syntax
class CContextMenuManager : public CObject
Members
Public Constructors
Name | Description |
---|---|
CContextMenuManager::CContextMenuManager | Constructs a CContextMenuManager object. |
CContextMenuManager::~CContextMenuManager |
Destructor. |
Public Methods
Name | Description |
---|---|
CContextMenuManager::AddMenu | Adds a new shortcut menu. |
CContextMenuManager::GetMenuById | Returns a handle to the menu associated with the provided resource ID. |
CContextMenuManager::GetMenuByName | Returns a handle to the menu that matches the provided menu name. |
CContextMenuManager::GetMenuNames | Returns a list of menu names. |
CContextMenuManager::LoadState | Loads shortcut menus stored in the Windows registry. |
CContextMenuManager::ResetState | Clears the shortcut menus from the context menu manager. |
CContextMenuManager::SaveState | Saves shortcut menus to the Windows registry. |
CContextMenuManager::SetDontCloseActiveMenu | Controls whether the CContextMenuManager closes the active shortcut menu when it shows a new shortcut menu. |
CContextMenuManager::ShowPopupMenu | Displays the specified shortcut menu. |
CContextMenuManager::TrackPopupMenu | Displays the specified shortcut menu. Returns the index of the selected menu command. |
Remarks
CContextMenuManager
manages shortcut menus and makes sure that they have a consistent appearance.
You should not create a CContextMenuManager
object manually. The framework of your application creates the CContextMenuManager
object. However, you should call CWinAppEx::InitContextMenuManager when your application is initialized. After initializing the context manager, use the method CWinAppEx::GetContextMenuManager to obtain a pointer to the context manager for your application.
You can create shortcut menus at runtime by calling AddMenu
. If you want to show the menu without first receiving user input, call ShowPopupMenu
. TrackPopupMenu
is used when you want to create a menu and wait for user input. TrackPopupMenu
returns the index of the selected command or 0 if the user exited without selecting anything.
The CContextMenuManager
can also save and load its state to the Windows registry.
Example
The following example demonstrates how to add a menu to a CContextMenuManager
object, and how not to close the active pop-up menu when the CContextMenuManager
object displays a new pop-up menu. This code snippet is part of the Custom Pages sample.
// The GetContextMenuManager method is inherited from the CWinAppEx class.
GetContextMenuManager()->AddMenu(_T("My menu"), IDR_CONTEXT_MENU);
GetContextMenuManager()->SetDontCloseActiveMenu(true);
Inheritance Hierarchy
CContextMenuManager
Requirements
Header: afxcontextmenumanager.h
CContextMenuManager::AddMenu
Adds a new shortcut menu to the CContextMenuManager.
BOOL AddMenu(
UINT uiMenuNameResId,
UINT uiMenuResId);
BOOL AddMenu(
LPCTSTR lpszName,
UINT uiMenuResId);
Parameters
uiMenuNameResId
[in] A resource ID for a string that contains the name for the new menu.
uiMenuResId
[in] The menu resource ID.
lpszName
[in] A string that contains the name for the new menu.
Return Value
Nonzero if the method was successful; 0 if the method fails.
Remarks
This method fails if uiMenuResId is invalid or if another menu with the same name already is in the CContextMenuManager
.
CContextMenuManager::CContextMenuManager
Constructs a CContextMenuManager object.
CContextMenuManager();
Remarks
In most cases, you should not create a CContextMenuManager
manually. The framework of your application creates the CContextMenuManager
object. You should call CWinAppEx::InitContextMenuManager during the initialization of your application. To get a pointer to the context manager, call CWinAppEx::GetContextMenuManager.
CContextMenuManager::GetMenuById
Returns a handle to the menu associated with a given resource ID.
HMENU GetMenuById(UINT nMenuResId) const;
Parameters
nMenuResId
[in] The resource ID for the menu.
Return Value
A handle to the associated menu or NULL
if the menu is not found.
CContextMenuManager::GetMenuByName
Returns a handle to a specific menu.
HMENU GetMenuByName(
LPCTSTR lpszName,
UINT* puiOrigResID = NULL) const;
Parameters
lpszName
[in] A string that contains the name of the menu to retrieve.
puiOrigResID
[out] A pointer to an UINT. This parameter contains the resource ID of the specified menu, if found.
Return Value
A handle to the menu that matches the name that was specified by lpszName. NULL if there is no menu called lpszName.
Remarks
If this method finds a menu that matches lpszName, GetMenuByName
stores the menu resource ID in the parameter puiOrigResID.
CContextMenuManager::GetMenuNames
Returns the list of menu names added to the CContextMenuManager.
void GetMenuNames(CStringList& listOfNames) const;
Parameters
listOfNames
[out] A reference to a CStringList parameter. This method writes the list of menu names to this parameter.
CContextMenuManager::LoadState
Loads information associated with the CContextMenuManager Class from the Windows registry.
virtual BOOL LoadState(LPCTSTR lpszProfileName = NULL);
Parameters
lpszProfileName
[in] A string that contains the relative path of a registry key.
Return Value
Nonzero if the method is successful; otherwise 0.
Remarks
The lpszProfileName parameter is not the absolute path for a registry entry. It is a relative path that is added to the end of the default registry key for your application. To get or set the default registry key, use the methods CWinAppEx::GetRegistryBase and CWinAppEx::SetRegistryBase respectively.
Use the method CContextMenuManager::SaveState to save the shortcut menus to the registry.
CContextMenuManager::ResetState
Clears all items from the shortcut menus associated with the CContextMenuManager Class.
virtual BOOL ResetState();
Return Value
TRUE if the method is successful; FALSE if a failure occurs.
Remarks
This method clears the pop-up menus and removes them from the CContextMenuManager
.
CContextMenuManager::SaveState
Saves information associated with the CContextMenuManager Class to the Windows registry.
virtual BOOL SaveState(LPCTSTR lpszProfileName = NULL);
Parameters
lpszProfileName
[in] A string that contains the relative path of a registry key.
Return Value
Nonzero if the method is successful; otherwise 0.
Remarks
The lpszProfileName parameter is not the absolute path for a registry entry. It is a relative path that is added to the end of the default registry key for your application. To get or set the default registry key, use the methods CWinAppEx::GetRegistryBase and CWinAppEx::SetRegistryBase respectively.
Use the method CContextMenuManager::LoadState to load the shortcut menus from the registry.
CContextMenuManager::SetDontCloseActiveMenu
Controls whether the CContextMenuManager closes the active pop-up menu when it displays a new pop-up menu.
void SetDontCloseActiveMenu (BOOL bSet = TRUE);
Parameters
bSet
[in] A Boolean parameter that controls whether to close the active pop-up menu. A value of TRUE indicates the active pop-up menu is not closed. FALSE indicates that the active pop-up menu is closed.
Remarks
By default, the CContextMenuManager
closes the active pop-up menu.
CContextMenuManager::ShowPopupMenu
Displays the specified shortcut menu.
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);
Parameters
uiMenuResId
[in] The resource ID of the menu that this method will display.
x
[in] The horizontal offset for the shortcut menu in client coordinates.
y
[in] The vertical offset for the shortcut menu in client coordinates
pWndOwner
[in] A pointer to the parent window of the shortcut menu.
bOwnMessage
[in] A Boolean parameter that indicates how messages are routed. If bOwnMessage is FALSE, standard MFC routing is used. Otherwise, pWndOwner receives the messages.
hmenuPopup
[in] The handle of the menu that this method will display.
bAutoDestroy
[in] A Boolean parameter that indicates whether the menu will be automatically destroyed.
bRightAlign
[in] A Boolean parameter that indicates how the menu items are aligned. If bRightAlign is TRUE, the menu is right-aligned for right-to-left reading order.
Return Value
The first method overload returns nonzero if the method shows the menu successfully; otherwise 0. The second method overload returns a pointer to CMFCPopupMenu if the shortcut menu displays correctly; otherwise NULL.
Remarks
This method resembles the method CContextMenuManager::TrackPopupMenu in that both methods display a shortcut menu. However, TrackPopupMenu
returns the index of the selected menu command.
If the parameter bAutoDestroy is FALSE, you must manually call the inherited DestroyMenu
method to release memory resources. The default implementation of ShowPopupMenu
does not use the parameter bAutoDestroy. It is provided for future use or for custom classes derived from the CContextMenuManager
class .
CContextMenuManager::TrackPopupMenu
Displays the specified shortcut menu and returns the index of the selected shortcut menu command.
virtual UINT TrackPopupMenu(
HMENU hmenuPopup,
int x,
int y,
CWnd* pWndOwner,
BOOL bRightAlign = FALSE);
Parameters
hmenuPopup
[in] The handle of the shortcut menu that this method displays.
x
[in] The horizontal offset for the shortcut menu in client coordinates.
y
[in] The vertical offset for the shortcut menu in client coordinates.
pWndOwner
[in] A pointer to the parent window of the shortcut menu.
bRightAlign
[in] A Boolean parameter that indicates how menu items are aligned. If bRightAlign is TRUE, the menu is right-aligned for right-to-left reading order. If bRightAlign is FALSE, the menu is left-aligned for left-to-right reading order.
Return Value
The menu command ID of the command that the user chooses; 0 if the user closes the shortcut menu without selecting a menu command.
Remarks
This method functions as a modal call to display a shortcut menu. The application will not continue to the following line in code until the user either closes the shortcut menu or selects a command. An alternative method that you can use to display a shortcut menu is CContextMenuManager::ShowPopupMenu. That method is not a modal call and will not return the ID of the selected command.