Função TrackPopupMenu (winuser.h)

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

Sintaxe

BOOL TrackPopupMenu(
  [in]           HMENU      hMenu,
  [in]           UINT       uFlags,
  [in]           int        x,
  [in]           int        y,
  [in]           int        nReserved,
  [in]           HWND       hWnd,
  [in, optional] const RECT *prcRect
);

Parâmetros

[in] hMenu

Tipo: HMENU

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

[in] uFlags

Tipo: UINT

Use zero de mais desses sinalizadores para especificar 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.

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, nas coordenadas da tela.

[in] y

Tipo: int

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

[in] nReserved

Tipo: int

Reservados; deve ser zero.

[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 uFlags , 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] prcRect

Tipo: const RECT*

Ignorado.

Valor retornado

Tipo: BOOL

Se você especificar TPM_RETURNCMD no parâmetro uFlags , 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 uFlags , 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 especificar uma área da tela que o menu não deve se sobrepor, use a função TrackPopupMenuEx

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.

No entanto, quando a janela atual é a janela em primeiro plano, a segunda vez que esse menu é exibido, ele aparece e desaparece imediatamente. Para corrigir isso, você deve forçar uma opção de tarefa para o aplicativo chamado TrackPopupMenu. Isso é feito postando uma mensagem benigna na janela ou thread, conforme mostrado no exemplo de código a seguir:


   SetForegroundWindow(hDlg);

   // Display the menu
   TrackPopupMenu(   hSubMenu,
                     TPM_RIGHTBUTTON,
                     pt.x,
                     pt.y,
                     0,
                     hDlg,
                     NULL);

   PostMessage(hDlg, WM_NULL, 0, 0);
 

Exemplos

Para obter um exemplo, consulte Exibindo um menu de atalho.

Requisitos

   
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-0 (introduzido no Windows 8)

Confira também

Conceitual

Createpopupmenu

GetSubMenu

Menus

Referência

Trackpopupmenuex

WM_COMMAND