Partager via


Redessination dans la région de mise à jour

Vous pouvez limiter la quantité de dessins que votre application effectue lors du traitement du message WM_PAINT en déterminant la taille et l’emplacement de la région de mise à jour. Étant donné que le système utilise la région de mise à jour lors de la création de la zone de découpage pour le contexte de périphérique d’affichage de la fenêtre, vous pouvez déterminer indirectement la région de mise à jour en examinant la région de découpage.

Dans l’exemple suivant, la procédure de fenêtre dessine un triangle, un rectangle, un pentagone et un hexagone, mais uniquement si la totalité ou une partie de chaque figure se trouve dans la région de mise à jour. La procédure de fenêtre utilise la fonction RectVisible et un rectangle de 100 par 100 pour déterminer si une figure se trouve dans la région de découpage (et donc la région de mise à jour) pour le contexte d’appareil commun récupéré par 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; 
 
  . 
  . 
  . 

Les coordonnées de chaque figure de cet exemple se trouvent dans le même rectangle 100 x 100. Avant de dessiner une figure, la procédure de fenêtre définit l’origine de la fenêtre d’affichage sur une autre partie de la zone cliente à l’aide de la fonction SetViewportOrgEx . Cela empêche les figures d’être dessinées les unes sur les autres. La modification de l’origine de la fenêtre d’affichage n’affecte pas la zone de découpage, mais affecte la façon dont les coordonnées du rectangle passées à RectVisible sont interprétées. La modification de l’origine vous permet également d’utiliser un rectangle unique pour case activée la région de mise à jour plutôt que des rectangles individuels pour chaque figure.