Ridisegno nell'area di aggiornamento

È possibile limitare la quantità di disegno eseguita dall'applicazione durante l'elaborazione del messaggio di WM_PAINT determinando le dimensioni e la posizione dell'area di aggiornamento. Poiché il sistema usa l'area di aggiornamento durante la creazione dell'area di ritaglio per il contesto del dispositivo visualizzato della finestra, è possibile determinare indirettamente l'area di aggiornamento esaminando l'area di ritaglio.

Nell'esempio seguente la procedura finestra disegna un triangolo, un rettangolo, un pentagono e un esagono, ma solo se tutte o una parte di ogni figura si trova all'interno dell'area di aggiornamento. La procedura della finestra usa la funzione RectVisible e un rettangolo 100-by-100 per determinare se una figura si trova all'interno dell'area di ritaglio (e quindi l'area di aggiornamento) per il contesto del dispositivo comune recuperato da 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; 
 
  . 
  . 
  . 

Le coordinate di ogni figura di questo esempio si trovano nello stesso rettangolo 100-by-100. Prima di disegnare una figura, la procedura della finestra imposta l'origine del viewport su una parte diversa dell'area client usando la funzione SetViewportOrgEx . Ciò impedisce che le figure vengano disegnate una sopra l'altra. La modifica dell'origine del riquadro di visualizzazione non influisce sull'area di ritaglio, ma influisce sul modo in cui vengono interpretate le coordinate del rettangolo passato a RectVisible . La modifica dell'origine consente inoltre di usare un singolo rettangolo per controllare l'area di aggiornamento anziché i singoli rettangoli per ogni figura.