Condividi tramite


Ridisegno nell'area di aggiornamento

È possibile limitare la quantità di disegno eseguita dall'applicazione durante l'elaborazione del messaggio WM_PAINT determinando le dimensioni e la posizione dell'area di aggiornamento. Poiché il sistema usa l'area di aggiornamento quando si crea l'area di ritaglio per il contesto del dispositivo di visualizzazione 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 per 100 per determinare se una figura si trova nell'area di ritaglio (e quindi nell'area di aggiornamento) per il contesto di 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 in questo esempio si trovano all'interno dello stesso rettangolo 100-by-100. Prima di disegnare una figura, la routine finestra imposta l'origine del riquadro di visualizzazione 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 sulla modalità di interpretazione delle coordinate del rettangolo passato a RectVisible. La modifica dell'origine consente anche di usare un singolo rettangolo per controllare l'area di aggiornamento anziché i singoli rettangoli per ogni figura.