Volver a dibujar en la región de actualización

Puede limitar la cantidad de dibujo que lleva a cabo la aplicación al procesar el mensaje WM_PAINT mediante la determinación del tamaño y la ubicación de la región de actualización. Dado que el sistema usa la región de actualización al crear la región de recorte para el contexto del dispositivo de visualización de la ventana, puede determinar indirectamente la región de actualización examinando la región de recorte.

En el ejemplo siguiente, el procedimiento de ventana dibuja un triángulo, un rectángulo, un triángulo, un triángulo y un hexágono, pero solo si todo o una parte de cada figura se encuentra dentro de la región de actualización. El procedimiento de ventana usa la función RectVisible y un rectángulo de 100 a 100 para determinar si una figura está dentro de la región de recorte (y, por tanto, la región de actualización) para el contexto de dispositivo común recuperado por BeginPaint.

POINT aptTriangle[4]  = {50,2, 98,86,  2,86, 50,2}, 
      aptRectangle[5] = { 2,2, 98,2,  98,98,  2,98, 2,2}, 
      aptPentagon[6]  = {50,2, 98,35, 79,90, 21,90, 2,35, 50,2}, 
      aptHexagon[7]   = {50,2, 93,25, 93,75, 50,98, 7,75, 7,25, 50,2}; 
  . 
  . 
  . 
 
        case WM_PAINT: 
            hdc = BeginPaint(hwnd, &ps); 
            SetRect(&rc, 0, 0, 100, 100); 
 
            if (RectVisible(hdc, &rc)) 
                Polyline(hdc, aptTriangle, 4); 
 
            SetViewportOrgEx(hdc, 100, 0, NULL); 
            if (RectVisible(hdc, &rc)) 
                Polyline(hdc, aptRectangle, 5); 
 
            SetViewportOrgEx(hdc, 0, 100, NULL); 
            if (RectVisible(hdc, &rc)) 
                Polyline(hdc, aptPentagon, 6); 
 
            SetViewportOrgEx(hdc, 100, 100, NULL); 
            if (RectVisible(hdc, &rc)) 
                Polyline(hdc, aptHexagon, 7); 
            EndPaint(hwnd, &ps); 
            return 0L; 
 
  . 
  . 
  . 

Las coordenadas de cada figura de este ejemplo se encuentran dentro del mismo rectángulo de 100 a 100. Antes de dibujar una figura, el procedimiento de ventana establece el origen de la ventanilla en una parte diferente del área cliente mediante la función SetViewportOrgEx . Esto evita que las figuras se dibujen una encima de la otra. Cambiar el origen de la ventanilla no afecta a la región de recorte, pero afecta a cómo se interpretan las coordenadas del rectángulo pasado a RectVisible . Cambiar el origen también permite usar un único rectángulo para comprobar la región de actualización en lugar de rectángulos individuales para cada figura.