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

Adiciona comandos a um menu de atalho.

Sintaxe

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

Parâmetros

hmenu

Tipo: HMENU

Um identificador para o menu de atalho. O manipulador deve especificar esse identificador ao adicionar itens de menu.

indexMenu

Tipo: UINT

A posição baseada em zero na qual inserir o primeiro novo item de menu.

idCmdFirst

Tipo: UINT

O valor mínimo que o manipulador pode especificar para um identificador de item de menu.

idCmdLast

Tipo: UINT

O valor máximo que o manipulador pode especificar para um identificador de item de menu.

uFlags

Tipo: UINT

Sinalizadores opcionais que especificam como o menu de atalho pode ser alterado. Esse parâmetro pode ser definido como uma combinação dos valores a seguir. Os bits restantes da palavra de baixa ordem são reservados pelo sistema. A palavra de alta ordem pode ser usada para comunicações específicas de contexto. O valor CMF_RESERVED pode ser usado para mascarar a palavra de baixa ordem.

CMF_NORMAL (0x00000000)

0x00000000. Indica a operação normal. Uma extensão de menu de atalho, uma extensão de namespace ou um manipulador de arrastar e soltar pode adicionar todos os itens de menu.

CMF_DEFAULTONLY (0x00000001)

0x00000001. O usuário está ativando a ação padrão, normalmente clicando duas vezes. Esse sinalizador fornece uma dica para a extensão de menu de atalho não adicionar nada se ele não modificar o item padrão no menu. Uma extensão de menu de atalho ou manipulador de arrastar e soltar não deve adicionar nenhum item de menu se esse valor for especificado. Uma extensão de namespace deve, no máximo, adicionar apenas o item padrão.

CMF_VERBSONLY (0x00000002)

0x00000002. O menu de atalho é o de um arquivo de atalho (normalmente, um arquivo .lnk). Os manipuladores de menu de atalho devem ignorar esse valor.

CMF_EXPLORE (0x00000004)

0x00000004. A janela da árvore do Windows Explorer está presente.

CMF_NOVERBS (0x00000008)

0x00000008. Esse sinalizador é definido para itens exibidos no menu Enviar para . Os manipuladores de menu de atalho devem ignorar esse valor.

CMF_CANRENAME (0x00000010)

0x00000010. O aplicativo de chamada dá suporte à renomeação de itens. Um menu de atalho ou manipulador de arrastar e soltar deve ignorar esse sinalizador. Uma extensão de namespace deve adicionar um item Renomear ao menu, se aplicável.

CMF_NODEFAULT (0x00000020)

0x00000020. Nenhum item no menu foi definido como o padrão. Um manipulador de arrastar e soltar deve ignorar esse sinalizador. Uma extensão de namespace não deve definir nenhum dos itens de menu como o padrão.

CMF_INCLUDESTATIC (0x00000040)

Esse valor não está disponível.

Windows Server 2003 e Windows XP: 0x00000040. Um menu estático está sendo construído. Somente o navegador deve usar esse sinalizador; todas as outras extensões de menu de atalho devem ignorá-la.

CMF_ITEMMENU (0x00000080)

0x00000080. O aplicativo de chamada está invocando um menu de atalho em um item na exibição (em vez da tela de fundo do modo de exibição).

Windows Server 2003 e Windows XP: Esse valor não está disponível.

CMF_EXTENDEDVERBS (0x00000100)

0x00000100. O aplicativo de chamada deseja verbos estendidos. Verbos normais são exibidos quando o usuário clica com o botão direito do mouse em um objeto. Para exibir verbos estendidos, o usuário deve clicar com o botão direito do mouse enquanto pressiona a tecla Shift.

CMF_DISABLEDVERBS (0x00000200)

0x00000200. O aplicativo de chamada pretende invocar verbos desabilitados, como menus herdados.

Windows Server 2003 e Windows XP: Esse valor não está disponível.

CMF_ASYNCVERBSTATE (0x00000400)

0x00000400. O estado do verbo pode ser avaliado de forma assíncrona.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Esse valor não está disponível.

CMF_OPTIMIZEFORINVOKE (0x00000800)

0x00000800. Informa manipuladores de menu de contexto que não dão suporte à invocação de um verbo por meio de um nome de verbo canônico para ignorar IContextMenu::QueryContextMenu em sua implementação.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Esse valor não está disponível.

CMF_SYNCCASCADEMENU (0x00001000)

0x00001000. Preencha o submenus de forma síncrona.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Esse valor não está disponível.

CMF_DONOTPICKDEFAULT (0x00002000)

0x00002000. Quando nenhum verbo for especificado explicitamente, não use um verbo padrão em seu lugar.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Esse valor não está disponível.

CMF_RESERVED (0xffff0000)

0xffff0000. Esse sinalizador é uma máscara de bits que especifica todos os bits que não devem ser usados. Isso deve ser usado apenas como uma máscara. Não passe isso como um valor de parâmetro.

Retornar valor

Tipo: HRESULT

Se tiver êxito, retornará um valor HRESULT que tem seu valor de severidade definido como SEVERITY_SUCCESS e seu valor de código definido como o deslocamento do maior identificador de comando atribuído, mais um. Por exemplo, se idCmdFirst estiver definido como 5 e você adicionar três itens ao menu com identificadores de comando de 5, 7 e 8, o valor retornado deverá ser MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1). Caso contrário, ele retornará um valor de erro COM.

Comentários

Esse método deve chamar InsertMenu ou InsertMenuItem para inserir seus itens de menu no menu especificado por hmenu. O parâmetro indexMenu mantém o índice a ser usado para o primeiro item de menu. O identificador de cada item de menu deve estar dentro do intervalo definido por idCmdFirst e idCmdLast.

Uma prática comum é definir o primeiro identificador de comando como idCmdFirst (um deslocamento de zero) e incrementar o deslocamento para cada comando adicional em um. Essa prática garante que você não exceda idCmdLast e preserve o intervalo de identificadores que estão disponíveis para uso por outros manipuladores. Armazene os deslocamentos para referência porque eles podem ser usados para identificar o comando em chamadas subsequentes para IContextMenu::GetCommandString e IContextMenu::InvokeCommand.

Se o Shell chamar posteriormente outro manipulador de menu de atalho, ele usará o valor de código do HRESULT retornado para definir idCmdFirst quando chamar o método QueryContextMenu desse manipulador.

Quando um manipulador de menu de contexto adiciona um item de menu pop-up, ele deve usar IContextMenu::QueryContextMenu para adicionar pelo menos um item a esse menu para que a mensagem WM_INITMENUPOPUP seja encaminhada.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho shobjidl_core.h (inclua Shobjidl.h)
DLL Shell32.dll (versão 4.0 ou posterior)