Função GetMessageW (winuser.h)
Recupera uma mensagem da fila de mensagens do thread de chamada. A função despacha mensagens enviadas de entrada até que uma mensagem postada esteja disponível para recuperação.
Ao contrário GetMessage, a função PeekMessage não aguarda que uma mensagem seja postada antes de retornar.
Sintaxe
BOOL GetMessageW(
[out] LPMSG lpMsg,
[in, optional] HWND hWnd,
[in] UINT wMsgFilterMin,
[in] UINT wMsgFilterMax
);
Parâmetros
[out] lpMsg
Tipo: LPMSG
Um ponteiro para uma estrutura msg
[in, optional] hWnd
Tipo: HWND
Um identificador para a janela cujas mensagens devem ser recuperadas. A janela deve pertencer ao thread atual.
Se
Se
[in] wMsgFilterMin
Tipo: UINT
O valor inteiro do valor de mensagem mais baixo a ser recuperado. Use WM_KEYFIRST (0x0100) para especificar a primeira mensagem de teclado ou WM_MOUSEFIRST (0x0200) para especificar a primeira mensagem do mouse.
Use WM_INPUT aqui e em wMsgFilterMax para especificar apenas as mensagens WM_INPUT.
Se wMsgFilterMin e wMsgFilterMax forem zero, GetMessage retornará todas as mensagens disponíveis (ou seja, nenhuma filtragem de intervalo será executada).
[in] wMsgFilterMax
Tipo: UINT
O valor inteiro do valor de mensagem mais alto a ser recuperado. Use WM_KEYLAST para especificar a última mensagem de teclado ou WM_MOUSELAST para especificar a última mensagem do mouse.
Use WM_INPUT aqui e em wMsgFilterMin para especificar apenas as mensagens WM_INPUT.
Se wMsgFilterMin e wMsgFilterMax forem zero, GetMessage retornará todas as mensagens disponíveis (ou seja, nenhuma filtragem de intervalo será executada).
Valor de retorno
Tipo: BOOL
Se a função recuperar uma mensagem diferente de WM_QUIT, o valor retornado não será zero.
Se a função recuperar a mensagem WM_QUIT, o valor retornado será zero.
Se houver um erro, o valor retornado será -1. Por exemplo, a função falhará se hWnd for um identificador de janela inválido ou lpMsg for um ponteiro inválido. Para obter informações de erro estendidas, chame GetLastError.
Como o valor retornado pode ser diferente de zero, zero ou -1, evite um código como este:
while (GetMessage( lpMsg, hWnd, 0, 0)) ...
A possibilidade de um valor retornado -1 no caso de hWnd ser um parâmetro inválido (como fazer referência a uma janela que já foi destruída) significa que esse código pode levar a erros fatais do aplicativo. Em vez disso, use um código como este:
BOOL bRet;
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Observações
Um aplicativo normalmente usa o valor retornado para determinar se o loop de mensagem principal deve ser encerrado e encerrado.
A função GetMessage recupera mensagens associadas à janela identificada pelo parâmetro hWnd ou qualquer um de seus filhos, conforme especificado pela função IsChild e dentro do intervalo de valores de mensagem fornecidos pelos parâmetros wMsgFilterMin e wMsgFilterMax. Observe que um aplicativo só pode usar a palavra baixa nos parâmetros wMsgFilterMin e wMsgFilterMax; a palavra alta é reservada para o sistema.
Observe que GetMessage sempre recupera mensagens WM_QUIT, independentemente dos valores especificados para wMsgFilterMin e wMsgFilterMax.
Durante essa chamada, o sistema fornece mensagens pendentes, ou seja, mensagens enviadas para janelas pertencentes ao thread de chamada usando o SendMessage, SendMessageCallback, SendMessageTimeoutou função SendNotifyMessage. Em seguida, a primeira mensagem enfileirada que corresponde ao filtro especificado é recuperada. O sistema também pode processar eventos internos. Se nenhum filtro for especificado, as mensagens serão processadas na seguinte ordem:
- Mensagens enviadas
- Mensagens postadas
- Mensagens de entrada (hardware) e eventos internos do sistema
- Mensagens enviadas (novamente)
- mensagens WM_PAINT
- mensagens WM_TIMER
GetMessage não remove mensagens WM_PAINT da fila. As mensagens permanecem na fila até serem processadas.
Se uma janela de nível superior parar de responder às mensagens por mais de vários segundos, o sistema considerará que a janela não está respondendo e a substituirá por uma janela fantasma que tenha os mesmos atributos de ordem z, local, tamanho e visual. Isso permite que o usuário o mova, redimensione-o ou até mesmo feche o aplicativo. No entanto, essas são as únicas ações disponíveis porque o aplicativo não está respondendo. Quando estiver no modo de depurador, o sistema não gerará uma janela fantasma.
Virtualização de DPI
Essa API não participa da virtualização de DPI. A saída está no modo da janela que a mensagem está direcionando. O thread de chamada não é levado em consideração.Exemplos
Para obter um exemplo, consulte Criando um loop de mensagem.
Nota
O cabeçalho winuser.h define GetMessage como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 2000 Professional [somente aplicativos da área de trabalho] |
servidor com suporte mínimo | Windows 2000 Server [somente aplicativos da área de trabalho] |
da Plataforma de Destino |
Windows |
cabeçalho | winuser.h (inclua Windows.h) |
biblioteca | User32.lib |
de DLL |
User32.dll |
conjunto de API | ext-ms-win-ntuser-message-l1-1-0 (introduzido no Windows 8) |
Consulte também
Conceitual
IsChild
mensagens e filas de mensagens
de referência de