Mensaje _ DE WM PAINT

El mensaje _ WM PAINT se envía cuando el sistema u otra aplicación realiza una solicitud para pintar una parte de la ventana de una aplicación. El mensaje se envía cuando se llama a la función UpdateWindow o RedrawWindow, o bien mediante la función DispatchMessage cuando la aplicación obtiene un mensaje WM _ PAINT mediante la función GetMessage o PeekMessage.

Una ventana recibe este mensaje a través de su función WindowProc.

LRESULT CALLBACK WindowProc(
  HWND hwnd, 
  UINT  uMsg, 
  WPARAM wParam, 
  LPARAM lParam     
);

Parámetros

wParam

Este parámetro no se utiliza.

lParam

Este parámetro no se utiliza.

Valor devuelto

Una aplicación devuelve cero si procesa este mensaje.

Ejemplo

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);
}

Ejemplo de Windows ejemplos clásicos en GitHub.

Observaciones

El sistema genera el mensaje WM _ PAINT y no lo debe enviar una aplicación. Para forzar que una ventana dibuje en un contexto de dispositivo específico, use el mensaje WM _ PRINT o WM _ PRINTCLIENT. Tenga en cuenta que esto requiere que la ventana de destino admita el _ mensaje PRINTCLIENT de WM. Los controles más comunes admiten el _ mensaje PRINTCLIENT de WM.

La función DefWindowProc valida la región de actualización. La función también puede enviar el mensaje _ WM NCPAINT al procedimiento de ventana si se debe pintar el marco de ventana y enviar el mensaje _ ERASEB DOMAINND de WM si se debe borrar el fondo de la ventana.

El sistema envía este mensaje cuando no hay ningún otro mensaje en la cola de mensajes de la aplicación. DispatchMessage determina dónde enviar el mensaje; GetMessage determina qué mensaje se va a enviar. GetMessage devuelve el mensaje WM _ PAINT cuando no hay ningún otro mensaje en la cola de mensajes de la aplicación y DispatchMessage envía el mensaje al procedimiento de ventana adecuado.

Una ventana puede recibir mensajes internos de pintura como resultado de llamar a RedrawWindow con la marca INTERNALPAINT de RDW _ establecida. En este caso, es posible que la ventana no tenga una región de actualización. Una aplicación puede llamar a la función GetUpdateRect para determinar si la ventana tiene una región de actualización. Si GetUpdateRect devuelve cero, la aplicación no necesita llamar a las funciones BeginPaint y EndPaint.

Una aplicación debe comprobar si hay cuadros internos necesarios si observa sus estructuras de datos internas para cada mensaje WM _ PAINT, ya que un mensaje WM PAINT puede deberse a una región de actualización que no es NULL y a una llamada a RedrawWindow con la marca INTERNALPAINT de RDW _ _ establecida.

El sistema envía un mensaje WM _ PAINT interno solo una vez. Después de que UpdateWindowdevuelve un mensaje INTERNO de WM _ PAINT desde GetMessage o PeekMessage o se envía a una ventana mediante UpdateWindow , el sistema no publica ni envía más mensajes WM _ PAINT hasta que se invalida la ventana o hasta que se vuelve a llamar a RedrawWindow con la marca INTERNALPAINT de RDW _ establecida.

Para algunos controles comunes, el procesamiento de mensajes _ WM PAINT predeterminado comprueba el parámetro wParam. Si wParam no es NULL, el control supone que el valor es un HDC y pinta con ese contexto de dispositivo.

Requisitos

Requisito Value
Cliente mínimo compatible
[Solo aplicaciones de escritorio] de Windows 2000 Professional
Servidor mínimo compatible
[Solo aplicaciones de escritorio] de Windows 2000 Server
Encabezado
Winuser.h (incluir Windows.h)

Vea también

Información general sobre dibujo y dibujo

Pintar y dibujar mensajes

BeginPaint

DefWindowProc

DispatchMessage

EndPaint

GetMessage

GetUpdateRect

PeekMessage

Volver a dibujarWindow

UpdateWindow

WM _ ERASEBND

WM _ NCPAINT

WM _ PRINT

WM _ PRINTCLIENT