Dela via


Rita om i uppdateringsregionen

Du kan begränsa hur mycket ritning ditt program utför när du bearbetar WM_PAINT-meddelandet genom att fastställa storlek och plats för uppdateringsregionen. Eftersom systemet använder uppdateringsregionen när du skapar urklippsregionen för fönstrets visningsenhetskontext kan du indirekt fastställa uppdateringsregionen genom att undersöka urklippsregionen.

I följande exempel ritar fönsterproceduren en triangel, en rektangel, en pentagon och en sexhörning, men bara om alla eller en del av varje figur ligger inom uppdateringsregionen. I fönsterproceduren används funktionen RectVisible och en 100 gånger 100 rektangel för att avgöra om en figur ligger inom klippregionen (och därmed uppdateringsregionen) för det gemensamma enhetssammanhanget som hämtas av funktionen 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; 
 
  . 
  . 
  . 

Koordinaterna för varje bild i det här exemplet ligger inom samma rektangel mellan 100 och 100. Innan du ritar en bild anger fönsterproceduren visningsportens ursprung till en annan del av klientområdet med hjälp av funktionen SetViewportOrgEx. Detta förhindrar att siffror ritas ovanpå varandra. Om du ändrar visningsportens ursprung påverkas inte urklippsregionen, men påverkar hur koordinaterna för rektangeln som skickas till RectVisible tolkas. Om du ändrar ursprunget kan du också använda en enda rektangel för att kontrollera uppdateringsregionen i stället för enskilda rektanglar för varje bild.