Compartir a través de


Estructura CONTEXTMENUITEM (mmc.h)

La estructura CONTEXTMENUITEM se pasa al método IContextMenuCallback::AddItem o al método IContextMenuProvider::AddItem (heredado de IContextMenuCallback) para definir un nuevo elemento de menú, submenú o punto de inserción. El menú contextual se crea a partir de la raíz hacia abajo, con cada nuevo elemento que va al final del submenú o punto de inserción donde se inserta.

Sintaxis

typedef struct _CONTEXTMENUITEM {
  LPWSTR strName;
  LPWSTR strStatusBarText;
  LONG   lCommandID;
  LONG   lInsertionPointID;
  LONG   fFlags;
  LONG   fSpecialFlags;
} CONTEXTMENUITEM;

Miembros

strName

Puntero a una cadena terminada en null que contiene el nombre del elemento de menú o del submenú. Este miembro no puede ser NULL excepto un separador o un punto de inserción.

strStatusBarText

Puntero a una cadena terminada en null que contiene el texto que se muestra en la barra de estado cuando este elemento está resaltado. Este miembro puede ser NULL.

lCommandID

Valor que especifica el identificador de comando para los elementos de menú. Si IExtendContextMenu::AddMenuItems agrega este elemento de menú y, a continuación, selecciona este es el identificador de comando que se pasa de nuevo a IExtendContextMenu::Command. Si la interfaz IContextMenuProvider agrega este elemento de menú y, a continuación, se selecciona, este es el identificador de comando que se devuelve a pISelected por IContextMenuProvider::ShowContextMenu. Si se trata de un punto de inserción (CCM_SPECIAL_INSERTION_POINT se establece en fSpecialFlags) o en un submenú (MF_POPUP se establece en fFlags), use lCommandID en llamadas posteriores como lInsertionPointID (para obtener más información, vea la lista siguiente). Lea detenidamente la siguiente explicación porque los bits específicos del nuevo identificador de punto de inserción deben estar activados y otros deben estar desactivados.

Algunos bits del identificador de comando requieren un control especial para los elementos que no son puntos de inserción ni submenús.

CCM_COMMANDID_MASK_RESERVED = 0xFFFF0000

No se pueden agregar elementos que no sean puntos de inserción y submenús cuando se establecen estos bits.

Algunos bits del identificador de punto de inserción requieren un control especial para los elementos que son puntos de inserción (fSpecialFlags y CCM_SPECIAL_INSERTION_POINT) o submenús (fFlags y MF_POPUP).

CCM_INSERTIONPOINTID_MASK_SPECIAL = 0xFFFF0000

Comportamiento especial. Los complementos pueden usar los demás bits según sea necesario.

CCM_INSERTIONPOINTID_MASK_SHARED = 0x80000000

Estos puntos de inserción y submenús se comparten entre el creador del menú contextual, la extensión principal y la extensión de terceros. Los elementos agregados a un punto de inserción compartido o submenú están disponibles para el creador del menú contextual, la extensión principal y la extensión de terceros.

Si no se establece este bit, la interfaz IContextMenuProvider y cada extensión puede usar el mismo identificador. Cada identificador hace referencia a un submenú o punto de inserción diferente.

Solo el creador del menú contextual y el complemento principal pueden crear puntos de inserción compartidos o submenús.

CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY = 0x40000000

Este bit debe establecerse para los puntos de inserción compartidos y submenús creados por el complemento principal y no para los creados por el creador del menú contextual. Esto evita conflictos de identificadores entre los dos orígenes de puntos de inserción compartidos y submenús.

CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY = 0x20000000

Permitir que el complemento principal agregue elementos a un punto de inserción o submenú compartidos.

CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY = 0x10000000

Permitir que los complementos de extensión agreguen elementos a un punto de inserción o submenú compartidos.

CCM_INSERTIONPOINTID_MASK_RESERVED = 0x0FFF0000

Los puntos de inserción o submenús no se pueden agregar con ninguno de estos bits establecidos.

lInsertionPointID

Valor que especifica dónde se debe agregar el nuevo elemento en el menú contextual. Los complementos solo pueden agregar elementos a los puntos de inserción creados por el creador del menú o el complemento principal. A continuación se muestran los puntos de inserción creados por MMC en los menús contextuales predeterminados para los elementos del panel de ámbito y el panel de resultados de la vista de lista:

0 (cero)

Un lInsertionPointID de cero hace referencia al menú raíz de este menú contextual. Cero se puede usar indistintamente con CCM_INSERTIONPOINTID_ROOT_MENU. Tenga en cuenta que solo la interfaz IContextMenuProvider puede agregar elementos directamente al menú raíz. Las extensiones solo pueden agregar elementos a puntos de inserción y submenús agregados al menú raíz por IContextMenuProvider o por MMC.

CCM_INSERTIONPOINTID_PRIMARY_TOP = 0xA0000000

El complemento principal puede usar este punto de inserción para agregar elementos a la parte superior del menú contextual principal.

CCM_INSERTIONPOINTID_PRIMARY_NEW = 0xA0000001

El complemento principal puede usar este punto de inserción para agregar elementos a la parte superior del submenú Nuevo. El submenú Nuevo está disponible en los menús contextuales tanto en el panel de ámbito como en el panel de resultados.

CCM_INSERTIONPOINTID_PRIMARY_TASK = 0xA0000002

El complemento principal puede usar este punto de inserción para agregar elementos a la parte superior del submenú Todas las tareas. El submenú Todas las tareas está disponible en los menús contextuales tanto en el panel de ámbito como en el panel de resultados.

CCM_INSERTIONPOINTID_PRIMARY_VIEW = 0xA0000003

El complemento principal puede usar este punto de inserción para agregar elementos al menú desplegable Ver . Si el usuario hace clic en el menú Ver de la barra de herramientas, este punto de inserción estará presente, pero los puntos de inserción Nuevo y Todas las tareas no aparecerán.

CCM_INSERTIONPOINTID_3RDPARTY_NEW = 0x90000001

Los complementos de extensión pueden usar este punto de inserción para agregar elementos a la parte inferior del submenú Nuevo. El submenú Nuevo solo está presente para los menús contextuales en el panel de ámbito y no para los menús contextuales en el panel de resultados.

CCM_INSERTIONPOINTID_3RDPARTY_TASK = 0x90000002

Los complementos de extensión pueden usar este punto de inserción para agregar elementos a la parte inferior del submenú Todas las tareas.

CCM_INSERTIONPOINTID_ROOT_MENU = 0x80000000

La interfaz IContextMenuProvider puede usar este punto de inserción para agregar elementos al menú raíz.

Ni las extensiones principales ni las extensiones de terceros pueden agregar elementos al menú raíz, excepto a través de puntos de inserción agregados por IContextMenuProvider.

fFlags

Valor que especifica una o varias de las marcas de estilo siguientes:

MF_POPUP

Valor que especifica que se trata de un submenú dentro del menú contextual. Los elementos de menú, los puntos de inserción y los submenús adicionales se pueden agregar a este submenú mediante su lCommandID como su lInsertionPointID.

MF_BITMAP

MF_OWNERDRAW

Estas marcas no se admiten y darán como resultado que IContextMenuCallback::AddItem devuelva E_INVALIDARG.

MF_SEPARATOR

Dibuja una línea de separador horizontal.

Solo la interfaz IContextMenuProvider puede agregar elementos de menú con MF_SEPARATOR establecido.

Las siguientes marcas funcionan de la misma manera que en la API de Windows:

MF_CHECKED

Selecciona el elemento de menú.

MF_DISABLED

Deshabilita el elemento de menú para que no se pueda seleccionar, pero la marca no la grisiza.

MF_ENABLED

Habilita el elemento de menú para que se pueda seleccionar y restaurarlo a partir de un estado atenuado.

MF_GRAYED

Deshabilita el elemento de menú, en gris para que no se pueda seleccionar.

MF_MENUBARBREAK

Funciona igual que la marca de MF_MENUBREAK para una barra de menús. Para un menú desplegable, submenú o menú contextual, la nueva columna se separa de la columna antigua mediante una línea vertical.

MF_MENUBREAK

Places el elemento en una nueva línea (para una barra de menús) o en una nueva columna (para un menú desplegable, submenú o menú contextual) sin separar columnas.

MF_UNCHECKED

No selecciona el elemento (valor predeterminado).

Los siguientes grupos de marcas no se pueden usar juntos:

  • MF_DISABLED, MF_ENABLED y MF_GRAYED
  • MF_MENUBARBREAK y MF_MENUBREAK
  • MF_CHECKED y MF_UNCHECKED

fSpecialFlags

Valor que especifica una o varias de las marcas siguientes:

CCM_SPECIAL_SEPARATOR = 0x0001

Omita todos los demás parámetros excepto lInsertionPointID. Agregue un separador al final del menú o en el punto de inserción especificado. Los separadores colocados en la parte superior o inferior de un menú o submenú no se mostrarán. Los separadores sin elementos de menú entre ellos se contraerán en un único separador.

Solo la interfaz IContextMenuProvider puede agregar separadores, especiales o de otro modo.

CCM_SPECIAL_SUBMENU = 0x0002

Si este submenú está vacío, estará atenuado y deshabilitado. Esto solo es válido para MF_POPUP elementos.

CCM_SPECIAL_DEFAULT_ITEM = 0x0004

Elemento de menú predeterminado. Si más de un elemento de menú especifica esta marca, el último elemento de cada submenú tiene prioridad.

CCM_SPECIAL_INSERTION_POINT = 0x0008

Omita todos los demás parámetros excepto lCommandID y lInsertionPointID. Esto crea un nuevo punto de inserción al final del punto de inserción o submenú identificado por lInsertionPointID.

Las llamadas posteriores pueden usar el parámetro lCommandID de esta llamada como su lInsertionPointID e insertar sus propios elementos de menú, submenús o puntos de inserción en este punto del menú.

CCM_SPECIAL_TESTONLY = 0x0010

Valide los parámetros del elemento, pero no agregue el elemento de menú. Devuelve el código de resultado que indica si la adición se habría realizado correctamente.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Encabezado mmc.h

Consulte también

IContextMenuCallback

IContextMenuProvider

IExtendContextMenu

Trabajar con menús contextuales