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

CObject

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.

Consulte también

Gráfico de jerarquías
Clases
CWinAppEx (clase)