Método IContextMenu::QueryContextMenu (shobjidl_core.h)

Agrega comandos a un menú contextual.

Sintaxis

HRESULT QueryContextMenu(
  HMENU hmenu,
  UINT  indexMenu,
  UINT  idCmdFirst,
  UINT  idCmdLast,
  UINT  uFlags
);

Parámetros

hmenu

Tipo: HMENU

Identificador del menú contextual. El controlador debe especificar este identificador al agregar elementos de menú.

indexMenu

Tipo: UINT

Posición de base cero en la que se va a insertar el primer elemento de menú nuevo.

idCmdFirst

Tipo: UINT

Valor mínimo que el controlador puede especificar para un identificador de elemento de menú.

idCmdLast

Tipo: UINT

Valor máximo que el controlador puede especificar para un identificador de elemento de menú.

uFlags

Tipo: UINT

Marcas opcionales que especifican cómo se puede cambiar el menú contextual. Este parámetro se puede establecer en una combinación de los valores siguientes. El sistema reserva los bits restantes de la palabra de orden bajo. La palabra de orden superior se puede usar para las comunicaciones específicas del contexto. El valor CMF_RESERVED se puede usar para enmascarar la palabra de orden bajo.

CMF_NORMAL (0x00000000)

0x00000000. Indica una operación normal. Una extensión de menú contextual, una extensión de espacio de nombres o un controlador de arrastrar y colocar puede agregar todos los elementos de menú.

CMF_DEFAULTONLY (0x00000001)

0x00000001. El usuario está activando la acción predeterminada, normalmente haciendo doble clic. Esta marca proporciona una sugerencia para que la extensión de menú contextual no agregue nada si no modifica el elemento predeterminado en el menú. Una extensión de menú contextual o un controlador de arrastrar y colocar no debe agregar ningún elemento de menú si se especifica este valor. Como máximo, una extensión de espacio de nombres debe agregar solo el elemento predeterminado.

CMF_VERBSONLY (0x00000002)

0x00000002. El menú contextual es el de un archivo de método abreviado (normalmente, un archivo .lnk). Los controladores de menú contextual deben omitir este valor.

CMF_EXPLORE (0x00000004)

0x00000004. La ventana de árbol del Explorador de Windows está presente.

CMF_NOVERBS (0x00000008)

0x00000008. Esta marca se establece para los elementos que se muestran en el menú Enviar a . Los controladores de menú contextual deben omitir este valor.

CMF_CANRENAME (0x00000010)

0x00000010. La aplicación que llama admite el cambio de nombre de los elementos. Un menú contextual o un controlador de arrastrar y colocar debe omitir esta marca. Si procede, una extensión de espacio de nombres debe agregar un elemento Cambiar nombre al menú.

CMF_NODEFAULT (0x00000020)

0x00000020. No se ha establecido ningún elemento en el menú como valor predeterminado. Un controlador de arrastrar y colocar debe omitir esta marca. Una extensión de espacio de nombres no debe establecer ninguno de los elementos de menú como valor predeterminado.

CMF_INCLUDESTATIC (0x00000040)

Este valor no está disponible.

Windows Server 2003 y Windows XP: 0x00000040. Se está construyendo un menú estático. Solo el explorador debe usar esta marca; todas las demás extensiones de menú contextual deben omitirla.

CMF_ITEMMENU (0x00000080)

0x00000080. La aplicación que realiza la llamada invoca un menú contextual en un elemento de la vista (en lugar del fondo de la vista).

Windows Server 2003 y Windows XP: Este valor no está disponible.

CMF_EXTENDEDVERBS (0x00000100)

0x00000100. La aplicación que realiza la llamada quiere verbos extendidos. Los verbos normales se muestran cuando el usuario hace clic con el botón derecho en un objeto. Para mostrar verbos extendidos, el usuario debe hacer clic con el botón derecho mientras presiona la tecla Mayús.

CMF_DISABLEDVERBS (0x00000200)

0x00000200. La aplicación que realiza la llamada pretende invocar verbos que están deshabilitados, como menús heredados.

Windows Server 2003 y Windows XP: Este valor no está disponible.

CMF_ASYNCVERBSTATE (0x00000400)

0x00000400. El estado del verbo se puede evaluar de forma asincrónica.

Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no está disponible.

CMF_OPTIMIZEFORINVOKE (0x00000800)

0x00000800. Informa a los controladores de menú contextual que no admiten la invocación de un verbo a través de un nombre de verbo canónico para omitir IContextMenu::QueryContextMenu en su implementación.

Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no está disponible.

CMF_SYNCCASCADEMENU (0x00001000)

0x00001000. Rellenar submenús sincrónicamente.

Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no está disponible.

CMF_DONOTPICKDEFAULT (0x00002000)

0x00002000. Cuando no se especifica ningún verbo explícitamente, no use un verbo predeterminado en su lugar.

Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no está disponible.

CMF_RESERVED (0xffff0000)

0xffff0000. Esta marca es una máscara de bits que especifica todos los bits que no se deben usar. Esto solo se usará como máscara. No pase esto como un valor de parámetro.

Valor devuelto

Tipo: HRESULT

Si se ejecuta correctamente, devuelve un valor HRESULT que tiene su valor de gravedad establecido en SEVERITY_SUCCESS y su valor de código establecido en el desplazamiento del identificador de comando más grande asignado, más uno. Por ejemplo, si idCmdFirst se establece en 5 y agrega tres elementos al menú con identificadores de comando de 5, 7 y 8, el valor devuelto debe ser MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1). De lo contrario, devuelve un valor de error COM.

Comentarios

Este método debe llamar a InsertMenu o InsertMenuItem para insertar sus elementos de menú en el menú especificado por hmenu. El parámetro indexMenu contiene el índice que se usará para el primer elemento de menú. El identificador de cada elemento de menú debe estar dentro del intervalo definido por idCmdFirst e idCmdLast.

Una práctica habitual es establecer el primer identificador de comando en idCmdFirst (un desplazamiento de cero) e incrementar el desplazamiento de cada comando adicional en uno. Esta práctica garantiza que no se supera idCmdLast y se conserva el intervalo de identificadores que están disponibles para su uso por otros controladores. Almacene los desplazamientos de referencia porque se pueden usar para identificar el comando en llamadas posteriores a IContextMenu::GetCommandString e IContextMenu::InvokeCommand.

Si el Shell llama posteriormente a otro controlador de menú contextual, usará el valor de código del HRESULT devuelto para establecer idCmdFirst cuando llame al método QueryContextMenu del controlador.

Cuando un controlador de menú contextual agrega un elemento de menú emergente, debe usar IContextMenu::QueryContextMenu para agregar al menos un elemento a ese menú para que se reenvíe el mensaje de WM_INITMENUPOPUP.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado shobjidl_core.h (include Shobjidl.h)
Archivo DLL Shell32.dll (versión 4.0 o posterior)