Função TrackPopupMenuEx (winuser.h)

Exibe um menu de atalho no local especificado e rastreia a seleção de itens no menu de atalho. O menu de atalho pode aparecer em qualquer lugar na tela.

Sintaxe

BOOL TrackPopupMenuEx(
  [in]           HMENU       hMenu,
  [in]           UINT        uFlags,
  [in]           int         x,
  [in]           int         y,
  [in]           HWND        hwnd,
  [in, optional] LPTPMPARAMS lptpm
);

Parâmetros

[in] hMenu

Tipo: HMENU

Um identificador para o menu de atalho a ser exibido. Esse identificador pode ser obtido chamando a função CreatePopupMenu para criar um novo menu de atalho ou chamando a função GetSubMenu para recuperar um identificador para um submenu associado a um item de menu existente.

[in] uFlags

Tipo: UINT

Especifica as opções de função.

Use um dos sinalizadores a seguir para especificar como a função posiciona o menu de atalho horizontalmente.

Valor Significado
TPM_CENTERALIGN
0x0004L
Centraliza o menu de atalho horizontalmente em relação à coordenada especificada pelo parâmetro x .
TPM_LEFTALIGN
0x0000L
Posiciona o menu de atalho para que seu lado esquerdo seja alinhado com a coordenada especificada pelo parâmetro x .
TPM_RIGHTALIGN
0x0008L
Posiciona o menu de atalho para que seu lado direito seja alinhado com a coordenada especificada pelo parâmetro x .
 

Use um dos sinalizadores a seguir para especificar como a função posiciona o menu de atalho verticalmente.

Valor Significado
TPM_BOTTOMALIGN
0x0020L
Posiciona o menu de atalho para que seu lado inferior seja alinhado com a coordenada especificada pelo parâmetro y .
TPM_TOPALIGN
0x0000L
Posiciona o menu de atalho para que seu lado superior seja alinhado com a coordenada especificada pelo parâmetro y .
TPM_VCENTERALIGN
0x0010L
Centraliza o menu de atalho verticalmente em relação à coordenada especificada pelo parâmetro y .
 

Use os sinalizadores a seguir para controlar a descoberta da seleção do usuário sem precisar configurar uma janela pai para o menu.

Valor Significado
TPM_NONOTIFY
0x0080L
A função não envia mensagens de notificação quando o usuário clica em um item de menu.
TPM_RETURNCMD
0x0100L
A função retorna o identificador de item de menu da seleção do usuário no valor retornado.
 

Use um dos sinalizadores a seguir para especificar qual botão do mouse o menu de atalho rastreia.

Valor Significado
TPM_LEFTBUTTON
0x0000L
O usuário pode selecionar itens de menu apenas com o botão esquerdo do mouse.
TPM_RIGHTBUTTON
0x0002L
O usuário pode selecionar itens de menu com os botões esquerdo e direito do mouse.
 

Use qualquer combinação razoável dos sinalizadores a seguir para modificar a animação de um menu. Por exemplo, selecionando um sinalizador horizontal e vertical, você pode obter animação diagonal.

Valor Significado
TPM_HORNEGANIMATION
0x0800L
Anima o menu da direita para a esquerda.
TPM_HORPOSANIMATION
0x0400L
Anima o menu da esquerda para a direita.
TPM_NOANIMATION
0x4000L
Exibe o menu sem animação.
TPM_VERNEGANIMATION
0x2000L
Anima o menu de baixo para cima.
TPM_VERPOSANIMATION
0x1000L
Anima o menu de cima para baixo.
 

Para que qualquer animação ocorra, a função SystemParametersInfo deve definir SPI_SETMENUANIMATION. Além disso, todos os sinalizadores TPM_*ANIMATION , exceto TPM_NOANIMATION, serão ignorados se a animação de fade do menu estiver ativada. Para obter mais informações, consulte o sinalizador SPI_GETMENUFADE em SystemParametersInfo.

Use o sinalizador TPM_RECURSE para exibir um menu quando outro menu já estiver exibido. Isso se destina a dar suporte a menus de contexto em um menu.

Use um dos sinalizadores a seguir para especificar se deseja acomodar o alinhamento horizontal ou vertical.

Valor Significado
TPM_HORIZONTAL
0x0000L
Se o menu não puder ser mostrado no local especificado sem sobrepor o retângulo excluído, o sistema tentará acomodar o alinhamento horizontal solicitado antes do alinhamento vertical solicitado.
TPM_VERTICAL
0x0040L
Se o menu não puder ser mostrado no local especificado sem sobrepor o retângulo excluído, o sistema tentará acomodar o alinhamento vertical solicitado antes do alinhamento horizontal solicitado.
 

O retângulo excluído é uma parte da tela que o menu não deve sobrepor; ele é especificado pelo parâmetro lptpm .

Para layout de texto da direita para a esquerda, use TPM_LAYOUTRTL. Por padrão, o layout de texto é da esquerda para a direita.

[in] x

Tipo: int

O local horizontal do menu de atalho, em coordenadas de tela.

[in] y

Tipo: int

O local vertical do menu de atalho, nas coordenadas da tela.

[in] hwnd

Digite: HWND

Um identificador para a janela que possui o menu de atalho. Essa janela recebe todas as mensagens do menu. A janela não recebe uma mensagem WM_COMMAND do menu até que a função retorne. Se você especificar TPM_NONOTIFY no parâmetro fuFlags , a função não enviará mensagens para a janela identificada por hwnd. No entanto, você ainda deve passar um identificador de janela no hwnd. Pode ser qualquer identificador de janela do aplicativo.

[in, optional] lptpm

Tipo: LPTPMPARAMS

Um ponteiro para uma estrutura TPMPARAMS que especifica uma área da tela que o menu não deve sobrepor. Este parâmetro pode ser NULL.

Retornar valor

Tipo: BOOL

Se você especificar TPM_RETURNCMD no parâmetro fuFlags , o valor retornado será o identificador de item de menu do item selecionado pelo usuário. Se o usuário cancelar o menu sem fazer uma seleção ou se ocorrer um erro, o valor retornado será zero.

Se você não especificar TPM_RETURNCMD no parâmetro fuFlags , o valor retornado será diferente de zero se a função for bem-sucedida e zero se falhar. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Chame GetSystemMetrics com SM_MENUDROPALIGNMENT para determinar o sinalizador de alinhamento horizontal correto (TPM_LEFTALIGN ou TPM_RIGHTALIGN) e/ou o sinalizador de direção de animação horizontal (TPM_HORPOSANIMATION ou TPM_HORNEGANIMATION) para passar para TrackPopupMenu ou TrackPopupMenuEx. Isso é essencial para criar uma experiência de usuário ideal, especialmente ao desenvolver aplicativos do Microsoft Tablet PC.

Para exibir um menu de contexto para um ícone de notificação, a janela atual deve ser a janela em primeiro plano antes que o aplicativo chame TrackPopupMenu ou TrackPopupMenuEx. Caso contrário, o menu não desaparecerá quando o usuário clicar fora do menu ou a janela que criou o menu (se estiver visível). Se a janela atual for uma janela filho, você deverá definir a janela pai (de nível superior) como a janela de primeiro plano.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winuser.h (inclua Windows.h)
Biblioteca User32.lib
DLL User32.dll
Conjunto de APIs ext-ms-win-ntuser-menu-l1-1-1 (introduzido em Windows 8.1)

Confira também

Conceitual

Createpopupmenu

GetSubMenu

Menus

Referência

TPMPARAMS

WM_COMMAND