Bagikan melalui


Menggambar ulang di Wilayah Pembaruan

Anda dapat membatasi jumlah gambar yang dilakukan aplikasi Anda saat memproses pesan WM_PAINT dengan menentukan ukuran dan lokasi wilayah pembaruan. Karena sistem menggunakan wilayah pembaruan saat membuat wilayah kliping untuk konteks perangkat tampilan jendela, Anda dapat secara tidak langsung menentukan wilayah pembaruan dengan memeriksa wilayah kliping.

Dalam contoh berikut, prosedur jendela menggambar segitiga, persegi panjang, segi lima, dan segi enam, tetapi hanya jika semua atau sebagian dari setiap gambar terletak dalam wilayah pembaruan. Prosedur jendela menggunakan fungsi RectVisible dan persegi panjang 100 per 100 untuk menentukan apakah gambar berada dalam wilayah kliping (dan oleh karena itu wilayah pembaruan) untuk konteks perangkat umum yang diambil oleh 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; 
 
  . 
  . 
  . 

Koordinat setiap gambar dalam contoh ini terletak dalam persegi panjang 100 demi 100 yang sama. Sebelum menggambar gambar, prosedur jendela mengatur asal viewport ke bagian lain dari area klien dengan menggunakan fungsi SetViewportOrgEx . Ini mencegah angka digambar satu di atas yang lain. Mengubah asal viewport tidak memengaruhi wilayah kliping, tetapi memengaruhi bagaimana koordinat persegi panjang yang diteruskan ke RectVisible ditafsirkan. Mengubah asal juga memungkinkan Anda menggunakan persegi panjang tunggal untuk memeriksa wilayah pembaruan daripada persegi panjang individual untuk setiap gambar.