WM_PAINT mensagem
A mensagem WM_PAINT é enviada quando o sistema ou outro aplicativo faz uma solicitação para pintar uma parte da janela de um aplicativo. A mensagem é enviada quando a função UpdateWindow ou RedrawWindow é chamada ou pela função DispatchMessage quando o aplicativo obtém uma mensagem WM_PAINT usando a função GetMessage ou PeekMessage .
Uma janela recebe essa mensagem por meio da função WindowProc.
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
Parâmetros
-
wParam
-
Este parâmetro não é usado.
-
lParam
-
Este parâmetro não é usado.
Retornar valor
Um aplicativo retornará zero se processar essa mensagem.
Exemplo
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// All painting occurs here, between BeginPaint and EndPaint.
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
EndPaint(hwnd, &ps);
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
Exemplo das Amostras do Windows Classic no GitHub.
Comentários
A mensagem WM_PAINT é gerada pelo sistema e não deve ser enviada por um aplicativo. Para forçar uma janela a desenhar em um contexto de dispositivo específico, use a mensagem WM_PRINT ou WM_PRINTCLIENT . Observe que isso requer a janela de destino para dar suporte à mensagem WM_PRINTCLIENT . Os controles mais comuns dão suporte à mensagem WM_PRINTCLIENT .
A função DefWindowProc valida a região de atualização. A função também poderá enviar a mensagem WM_NCPAINT para o procedimento de janela se o quadro da janela precisar ser pintado e enviar a mensagem WM_ERASEBKGND se o plano de fundo da janela precisar ser apagado.
O sistema envia essa mensagem quando não há outras mensagens na fila de mensagens do aplicativo. DispatchMessage determina para onde enviar a mensagem; GetMessage determina qual mensagem enviar. GetMessage retorna a mensagem WM_PAINT quando não há outras mensagens na fila de mensagens do aplicativo e DispatchMessage envia a mensagem para o procedimento de janela apropriado.
Uma janela pode receber mensagens de pintura internas como resultado da chamada redrawWindow com o sinalizador RDW_INTERNALPAINT definido. Nesse caso, a janela pode não ter uma região de atualização. Um aplicativo pode chamar a função GetUpdateRect para determinar se a janela tem uma região de atualização. Se GetUpdateRect retornar zero, o aplicativo não precisará chamar as funções BeginPaint e EndPaint .
Um aplicativo deve marcar para qualquer pintura interna necessária examinando suas estruturas de dados internas para cada mensagem WM_PAINT, pois uma mensagem WM_PAINT pode ter sido causada por uma região de atualização não NULL e uma chamada para RedrawWindow com o sinalizador RDW_INTERNALPAINT definido.
O sistema envia uma mensagem de WM_PAINT interna apenas uma vez. Depois que uma mensagem de WM_PAINT interna é retornada de GetMessage ou PeekMessage ou é enviada para uma janela por UpdateWindow, o sistema não publica nem envia mais mensagens WM_PAINT até que a janela seja invalidada ou até que RedrawWindow seja chamado novamente com o sinalizador RDW_INTERNALPAINT definido.
Para alguns controles comuns, o processamento de mensagens WM_PAINT padrão verifica o parâmetro wParam . Se wParam não for NULL, o controle pressupõe que o valor seja um HDC e pintará usando esse contexto de dispositivo.
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] |
Cabeçalho |
|
Confira também