Clase CContextMenuManager
El objeto CContextMenuManager
administra menús de acceso directo, también conocidos como menús contextuales.
Sintaxis
class CContextMenuManager : public CObject
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CContextMenuManager::CContextMenuManager | Construye un objeto CContextMenuManager . |
CContextMenuManager::~CContextMenuManager |
Destructor. |
Métodos públicos
Nombre | Descripción |
---|---|
CContextMenuManager::AddMenu | Agrega un nuevo menú contextual. |
CContextMenuManager::GetMenuById | Devuelve un identificador del menú asociado al identificador de recurso proporcionado. |
CContextMenuManager::GetMenuByName | Devuelve un identificador del menú que coincide con el nombre del menú proporcionado. |
CContextMenuManager::GetMenuNames | Devuelve una lista de nombres de menú. |
CContextMenuManager::LoadState | Carga los menús contextuales almacenados en el registro de Windows. |
CContextMenuManager::ResetState | Borra los menús contextuales del administrador de menús contextuales. |
CContextMenuManager::SaveState | Guarda los menús contextuales en el registro de Windows. |
CContextMenuManager::SetDontCloseActiveMenu | Controla si CContextMenuManager cierra el menú contextual activo cuando muestra un nuevo menú contextual. |
CContextMenuManager::ShowPopupMenu | Muestra el menú contextual especificado. |
CContextMenuManager::TrackPopupMenu | Muestra el menú contextual especificado. Devuelve el índice del comando de menú seleccionado. |
Comentarios
CContextMenuManager
administra los menús contextuales y se asegura de que tienen una apariencia coherente.
No debe crear un objeto CContextMenuManager
manualmente. El marco de la aplicación crea el objeto CContextMenuManager
. Sin embargo, debe llamar a CWinAppEx::InitContextMenuManager cuando se inicialice la aplicación. Después de inicializar el administrador de contextos, use el método CWinAppEx::GetContextMenuManager para obtener un puntero al administrador de contextos de la aplicación.
Puede crear menús contextuales en el entorno de ejecución mediante una llamada a AddMenu
. Si desea mostrar el menú sin recibir primero la entrada del usuario, llame a ShowPopupMenu
. TrackPopupMenu
se usa cuando se desea crear un menú y espera una entrada del usuario. TrackPopupMenu
devuelve el índice del comando seleccionado o 0 si el usuario ha salido sin seleccionar nada.
CContextMenuManager
también puede guardar y cargar su estado en el registro de Windows.
Ejemplo
En el ejemplo siguiente se muestra cómo agregar un menú a un objeto CContextMenuManager
y cómo no cerrar el menú emergente activo cuando el objeto CContextMenuManager
muestra un nuevo menú emergente. Este fragmento de código forma parte del ejemplo de páginas personalizadas.
// The GetContextMenuManager method is inherited from the CWinAppEx class.
GetContextMenuManager()->AddMenu(_T("My menu"), IDR_CONTEXT_MENU);
GetContextMenuManager()->SetDontCloseActiveMenu(true);
Jerarquía de herencia
CContextMenuManager
Requisitos
Encabezado: afxcontextmenumanager.h
CContextMenuManager::AddMenu
Agrega un nuevo menú contextual a CContextMenuManager.
BOOL AddMenu(
UINT uiMenuNameResId,
UINT uiMenuResId);
BOOL AddMenu(
LPCTSTR lpszName,
UINT uiMenuResId);
Parámetros
uiMenuNameResId
[in] Identificador de recurso de una cadena que contiene el nombre del nuevo menú.
uiMenuResId
[in] Identificador del recurso de menú.
lpszName
[in] Cadena que contiene el nombre del nuevo menú.
Valor devuelto
Distinto de cero si el método se realizó correctamente. En caso contrario, 0.
Comentarios
Este método produce un error si uiMenuResId no es válido o si ya hay otro menú con el mismo nombre en CContextMenuManager
.
CContextMenuManager::CContextMenuManager
Construye un objeto CContextMenuManager.
CContextMenuManager();
Comentarios
En la mayoría de los casos, no debería crear manualmente un objeto CContextMenuManager
. El marco de la aplicación crea el objeto CContextMenuManager
. Debe llamar a CWinAppEx::InitContextMenuManager durante la inicialización de la aplicación. Para obtener un puntero al administrador de contextos, llame a CWinAppEx::GetContextMenuManager.
CContextMenuManager::GetMenuById
Devuelve un identificador al menú asociado al identificador de un recurso proporcionado.
HMENU GetMenuById(UINT nMenuResId) const;
Parámetros
nMenuResId
[in] El identificador de recurso del menú.
Valor devuelto
Identificador del menú asociado o NULL
si no se encuentra el menú.
CContextMenuManager::GetMenuByName
Devuelve un identificador de un menú específico.
HMENU GetMenuByName(
LPCTSTR lpszName,
UINT* puiOrigResID = NULL) const;
Parámetros
lpszName
[in] Cadena que contiene el nombre del menú que se va a recuperar.
puiOrigResID
[out] Puntero a un UINT. Este parámetro contiene el identificador de recurso del menú especificado, si se encuentra.
Valor devuelto
Identificador del menú que coincide con el nombre que lpszName especificó. NULL si no hay ningún menú llamado lpszName.
Comentarios
Si este método encuentra un menú que coincide con lpszName, GetMenuByName
almacena el identificador de recurso del menú en el parámetro puiOrigResID.
CContextMenuManager::GetMenuNames
Devuelve la lista de nombres de menú agregados a CContextMenuManager.
void GetMenuNames(CStringList& listOfNames) const;
Parámetros
listOfNames
[out] Referencia a un parámetro CStringList. Este método escribe la lista de nombres de menú en este parámetro.
CContextMenuManager::LoadState
Carga información asociada a la clase CContextMenuManager desde el registro de Windows.
virtual BOOL LoadState(LPCTSTR lpszProfileName = NULL);
Parámetros
lpszProfileName
[in] Cadena que contiene la ruta de acceso relativa de una clave del Registro.
Valor devuelto
Distinto de cero si el método es correcto; en caso contrario, 0.
Comentarios
El parámetro lpszProfileName no es la ruta de acceso absoluta de una entrada del registro. Es una ruta de acceso relativa que se agrega al final de la clave del Registro predeterminada de la aplicación. Para obtener o establecer la clave del Registro predeterminada, use los métodos CWinAppEx::GetRegistryBase y CWinAppEx::SetRegistryBase respectivamente.
Use el método CContextMenuManager::SaveState para guardar los menús contextuales en el registro.
CContextMenuManager::ResetState
Borra todos los elementos de los menús contextuales asociados a la clase CContextMenuManager.
virtual BOOL ResetState();
Valor devuelto
TRUE si el método es correcto; FALSE si se produce un error.
Comentarios
Este método borra los menús emergentes y los elimina de CContextMenuManager
.
CContextMenuManager::SaveState
Guarda la información asociada a la clase CContextMenuManager en el registro de Windows.
virtual BOOL SaveState(LPCTSTR lpszProfileName = NULL);
Parámetros
lpszProfileName
[in] Cadena que contiene la ruta de acceso relativa de una clave del Registro.
Valor devuelto
Distinto de cero si el método es correcto; en caso contrario, 0.
Comentarios
El parámetro lpszProfileName no es la ruta de acceso absoluta de una entrada del registro. Es una ruta de acceso relativa que se agrega al final de la clave del Registro predeterminada de la aplicación. Para obtener o establecer la clave del Registro predeterminada, use los métodos CWinAppEx::GetRegistryBase y CWinAppEx::SetRegistryBase respectivamente.
Use el método CContextMenuManager::LoadState para cargar los menús contextuales del registro.
CContextMenuManager::SetDontCloseActiveMenu
Controla si CContextMenuManager cierra el menú emergente activo si aparece un nuevo menú emergente.
void SetDontCloseActiveMenu (BOOL bSet = TRUE);
Parámetros
bSet
[in] Parámetro booleano que controla si se va a cerrar el menú emergente activo. Un valor de TRUE indica que el menú emergente activo no está cerrado. FALSE indica que el menú emergente activo está cerrado.
Comentarios
De forma predeterminada, CContextMenuManager
cierra el menú emergente activo.
CContextMenuManager::ShowPopupMenu
Muestra el menú contextual especificado.
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);
Parámetros
uiMenuResId
[in] Identificador de recurso del menú que mostrará este método.
x
[in] Desplazamiento horizontal del menú contextual en coordenadas de cliente.
y
[in] Desplazamiento horizontal del menú contextual en coordenadas de cliente.
pWndOwner
[in] Puntero a la ventana primaria del menú contextual.
bOwnMessage
[in] Parámetro booleano que indica cómo se enrutan los mensajes. Si bOwnMessage es FALSE, se usa el enrutamiento de MFC estándar. De lo contrario, pWndOwner recibe los mensajes.
hmenuPopup
[in] Identificador del menú que mostrará este método.
bAutoDestroy
[in] Parámetro booleano que indica si el menú se destruirá automáticamente.
bRightAlign
[in] Parámetro booleano que indica cómo se alinean los elementos de menú. Si bRightAlign es TRUE, el menú se alinea a la derecha para un orden de lectura de derecha a izquierda.
Valor devuelto
La primera sobrecarga del método devuelve un valor distinto de cero si el método muestra el menú correctamente; de lo contrario, el valor es 0. La segunda sobrecarga del método devuelve un puntero a CMFCPopupMenu si el menú contextual se muestra correctamente; en caso contrario, NULL.
Comentarios
Este método se parece al método CContextMenuManager::TrackPopupMenu en que ambos métodos muestran un menú contextual. Sin embargo, TrackPopupMenu
devuelve el índice del comando de menú seleccionado.
Si el parámetro bAutoDestroy es FALSE, debe llamar manualmente al método heredado DestroyMenu
para liberar recursos de memoria. La implementación predeterminada de ShowPopupMenu
no usa el parámetro bAutoDestroy. Se proporciona para uso futuro o para clases personalizadas derivadas de la clase CContextMenuManager
.
CContextMenuManager::TrackPopupMenu
Muestra el menú contextual especificado y devuelve el índice del comando de menú contextual seleccionado.
virtual UINT TrackPopupMenu(
HMENU hmenuPopup,
int x,
int y,
CWnd* pWndOwner,
BOOL bRightAlign = FALSE);
Parámetros
hmenuPopup
[in] Identificador del menú contextual que muestra este método.
x
[in] Desplazamiento horizontal del menú contextual en coordenadas de cliente.
y
[in] Desplazamiento horizontal del menú contextual en coordenadas de cliente.
pWndOwner
[in] Puntero a la ventana primaria del menú contextual.
bRightAlign
[in] Parámetro booleano que indica cómo se alinean los elementos de menú. Si bRightAlign es TRUE, el menú se alinea a la derecha para un orden de lectura de derecha a izquierda. Si bRightAlign es FALSE, el menú se alinea a la izquierda para un orden de lectura de izquierda a derecha.
Valor devuelto
Identificador de comando de menú del comando que elige el usuario; será 0 si el usuario cierra el menú contextual sin seleccionar un comando de menú.
Comentarios
Este método funciona como una llamada modal para mostrar un menú contextual. La aplicación no continuará con la siguiente línea del código hasta que el usuario cierre el menú contextual o seleccione un comando. Un método alternativo que puede usar para mostrar un menú contextual es CContextMenuManager::ShowPopupMenu. Ese método no es una llamada modal y no devolverá el identificador del comando seleccionado.