Compartilhar via


Estrutura CONTEXTMENUITEM (mmc.h)

A estrutura CONTEXTMENUITEM é passada para o método IContextMenuCallback::AddItem ou o método IContextMenuProvider::AddItem (herdado de IContextMenuCallback) para definir um novo item de menu, submenu ou ponto de inserção. O menu de contexto é criado a partir da raiz para baixo, com cada novo item indo para o final do submenu ou ponto de inserção em que ele é inserido.

Sintaxe

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

Membros

strName

Um ponteiro para uma cadeia de caracteres terminada em nulo que contém o nome do item de menu ou do submenu. Esse membro não pode ser NULL , exceto por um separador ou ponto de inserção.

strStatusBarText

Um ponteiro para uma cadeia de caracteres terminada em nulo que contém o texto exibido na barra de status quando este item é realçado. Esse membro pode ser NULL.

lCommandID

Um valor que especifica o identificador de comando para itens de menu. Se este item de menu for adicionado por IExtendContextMenu::AddMenuItems e, em seguida, selecionado, essa será a ID de comando que é passada de volta para IExtendContextMenu::Command. Se esse item de menu for adicionado pela interface IContextMenuProvider e selecionado, essa será a ID de comando que é passada de volta para pISelected por IContextMenuProvider::ShowContextMenu. Se esse for um ponto de inserção (CCM_SPECIAL_INSERTION_POINT é definido em fSpecialFlags) ou um submenu (MF_POPUP está definido em fFlags), use lCommandID em chamadas subsequentes como lInsertionPointID (para obter mais informações, consulte a lista a seguir). Leia cuidadosamente a discussão a seguir porque bits específicos na nova ID do ponto de inserção devem estar ativados e outros devem estar desativados.

Alguns bits na ID de comando exigem tratamento especial para itens que não são pontos de inserção ou submenus.

CCM_COMMANDID_MASK_RESERVED = 0xFFFF0000

Itens diferentes de pontos de inserção e submenus não podem ser adicionados quando esses bits são definidos.

Alguns bits na ID do ponto de inserção exigem tratamento especial para itens que são pontos de inserção (fSpecialFlags e CCM_SPECIAL_INSERTION_POINT) ou submenus (fFlags e MF_POPUP).

CCM_INSERTIONPOINTID_MASK_SPECIAL = 0xFFFF0000

Comportamento especial. Os snap-ins podem usar os outros bits conforme necessário.

CCM_INSERTIONPOINTID_MASK_SHARED = 0x80000000

Esses pontos de inserção e submenus são compartilhados entre o criador do menu de contexto, a extensão primária e a extensão de terceiros. Os itens adicionados a um ponto de inserção compartilhado ou submenu estão disponíveis para o criador do menu de contexto, a extensão primária e a extensão de terceiros.

Se esse bit não estiver definido, a interface IContextMenuProvider e cada extensão poderão usar a mesma ID. Cada ID refere-se a um ponto de inserção ou submenu diferente.

Somente o criador do menu de contexto e o snap-in primário podem criar pontos de inserção compartilhados ou submenus.

CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY = 0x40000000

Esse bit deve ser definido para pontos de inserção compartilhados e submenus criados pelo snap-in primário e não definido para aqueles criados pelo criador do menu de contexto. Isso impede conflitos de ID entre as duas fontes de pontos de inserção compartilhados e submenus.

CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY = 0x20000000

Permita que o snap-in primário adicione itens a um ponto de inserção ou submenu compartilhado.

CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY = 0x10000000

Permitir que snap-ins de extensão adicionem itens a um ponto de inserção ou submenu compartilhado.

CCM_INSERTIONPOINTID_MASK_RESERVED = 0x0FFF0000

Pontos de inserção ou submenus não podem ser adicionados com nenhum desses bits definidos.

lInsertionPointID

Um valor que especifica onde no menu de contexto o novo item deve ser adicionado. Os snap-ins só podem adicionar itens aos pontos de inserção criados pelo criador do menu ou pelo snap-in primário. Veja a seguir os pontos de inserção criados pelo MMC nos menus de contexto padrão para itens no painel de escopo e no painel de resultados da exibição de lista:

0 (zero)

Um lInsertionPointID de zero refere-se ao menu raiz deste menu de contexto. Zero pode ser usado intercambiável com CCM_INSERTIONPOINTID_ROOT_MENU. Lembre-se de que somente a interface IContextMenuProvider pode adicionar itens diretamente ao menu raiz. As extensões só podem adicionar itens a pontos de inserção e submenus adicionados ao menu raiz por IContextMenuProvider ou por MMC.

CCM_INSERTIONPOINTID_PRIMARY_TOP = 0xA0000000

O snap-in primário pode usar esse ponto de inserção para adicionar itens à parte superior do menu de contexto main.

CCM_INSERTIONPOINTID_PRIMARY_NEW = 0xA0000001

O snap-in primário pode usar esse ponto de inserção para adicionar itens à parte superior do submenu Novo. O novo submenu está disponível em menus de contexto no painel de escopo e no painel de resultados.

CCM_INSERTIONPOINTID_PRIMARY_TASK = 0xA0000002

O snap-in primário pode usar esse ponto de inserção para adicionar itens à parte superior do submenu Todas as Tarefas. O submenu Todas as Tarefas está disponível em menus de contexto no painel de escopo e no painel de resultados.

CCM_INSERTIONPOINTID_PRIMARY_VIEW = 0xA0000003

O snap-in primário pode usar esse ponto de inserção para adicionar itens ao menu suspenso Exibir . Se o usuário clicar no menu Exibir na barra de ferramentas, esse ponto de inserção estará presente, mas os pontos de inserção Novo e Todas as Tarefas não serão exibidos.

CCM_INSERTIONPOINTID_3RDPARTY_NEW = 0x90000001

Os snap-ins de extensão podem usar esse ponto de inserção para adicionar itens à parte inferior do submenu Novo. O novo submenu só está presente para menus de contexto no painel de escopo e não para menus de contexto no painel de resultados.

CCM_INSERTIONPOINTID_3RDPARTY_TASK = 0x90000002

Os snap-ins de extensão podem usar esse ponto de inserção para adicionar itens à parte inferior do submenu Todas as Tarefas.

CCM_INSERTIONPOINTID_ROOT_MENU = 0x80000000

A interface IContextMenuProvider pode usar esse ponto de inserção para adicionar itens ao menu raiz.

Nem extensões primárias nem extensões de terceiros podem adicionar itens ao menu raiz, exceto por meio de pontos de inserção adicionados por IContextMenuProvider.

fFlags

Um valor que especifica um ou mais dos seguintes sinalizadores de estilo:

MF_POPUP

Um valor que especifica que esse é um submenu no menu de contexto. Itens de menu, pontos de inserção e submenus adicionais podem ser adicionados a esse submenu usando seu lCommandID como lInsertionPointID.

MF_BITMAP

MF_OWNERDRAW

Esses sinalizadores não têm suporte e resultarão em IContextMenuCallback::AddItem retornando E_INVALIDARG.

MF_SEPARATOR

Desenha uma linha do separador horizontal.

Somente a interface IContextMenuProvider pode adicionar itens de menu com MF_SEPARATOR definido.

Os sinalizadores a seguir funcionam da mesma maneira que fazem na API do Windows:

MF_CHECKED

Seleciona o item de menu.

MF_DISABLED

Desabilita o item de menu para que ele não possa ser selecionado, mas o sinalizador não o esmaeça.

MF_ENABLED

Habilita o item de menu para que ele possa ser selecionado, restaurando-o de um estado esmaecido.

MF_GRAYED

Desabilita o item de menu, esmaeçando-o para que ele não possa ser selecionado.

MF_MENUBARBREAK

Funciona da mesma forma que o sinalizador MF_MENUBREAK para uma barra de menus. Para um menu suspenso, submenu ou menu de atalho, a nova coluna é separada da coluna antiga por uma linha vertical.

MF_MENUBREAK

Places o item em uma nova linha (para uma barra de menus) ou em uma nova coluna (para um menu suspenso, submenu ou menu de atalho) sem separar colunas.

MF_UNCHECKED

Não seleciona o item (padrão).

Os seguintes grupos de sinalizadores não podem ser usados juntos:

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

fSpecialFlags

Um valor que especifica um ou mais dos seguintes sinalizadores:

CCM_SPECIAL_SEPARATOR = 0x0001

Ignore todos os outros parâmetros, exceto lInsertionPointID. Adicione um separador ao final do menu ou no ponto de inserção especificado. Separadores colocados na parte superior ou inferior de um menu ou submenu não serão exibidos. Separadores sem itens de menu entre eles serão recolhidos em um único separador.

Somente a interface IContextMenuProvider pode adicionar separadores, especiais ou não.

CCM_SPECIAL_SUBMENU = 0x0002

Se esse submenu estiver vazio, ele será esmaecido e desabilitado. Isso só é válido para MF_POPUP itens.

CCM_SPECIAL_DEFAULT_ITEM = 0x0004

O item de menu padrão. Se mais de um item de menu especificar esse sinalizador, o último item em cada submenu terá precedência.

CCM_SPECIAL_INSERTION_POINT = 0x0008

Ignore todos os outros parâmetros, exceto lCommandID e lInsertionPointID. Isso cria um novo ponto de inserção no final do ponto de inserção ou submenu identificado por lInsertionPointID.

As chamadas subsequentes podem usar o parâmetro lCommandID dessa chamada como lInsertionPointID e inserir seus próprios itens de menu, submenus ou pontos de inserção neste ponto do menu.

CCM_SPECIAL_TESTONLY = 0x0010

Valide os parâmetros do item, mas não adicione o item de menu. Retorna o código de resultado que indica se add teria sido bem-sucedido.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Cabeçalho mmc.h

Confira também

Icontextmenucallback

IContextMenuProvider

Iextendcontextmenu

Trabalhando com menus de contexto