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.
Use um dos sinalizadores a seguir para especificar como a função posiciona o menu de atalho verticalmente.
Use os sinalizadores a seguir para controlar a descoberta da seleção do usuário sem precisar configurar uma janela pai para o menu.
Use um dos sinalizadores a seguir para especificar qual botão do mouse o menu de atalho rastreia.
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.
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
Referência