Bagikan melalui


Konteks Perangkat Tampilan Privat

Konteks perangkat privat memungkinkan aplikasi untuk menghindari pengambilan dan menginisialisasi konteks perangkat tampilan setiap kali aplikasi harus menggambar di jendela. Konteks perangkat privat berguna untuk jendela yang memerlukan banyak perubahan pada nilai atribut konteks perangkat untuk menyiapkannya untuk menggambar. Konteks perangkat privat mengurangi waktu yang diperlukan untuk menyiapkan konteks perangkat dan oleh karena itu waktu yang diperlukan untuk melakukan menggambar di jendela.

Aplikasi mengarahkan sistem untuk membuat konteks perangkat privat untuk jendela dengan menentukan gaya CS_OWNDC di kelas jendela. Sistem membuat konteks perangkat privat yang unik setiap kali membuat jendela baru milik kelas. Awalnya, konteks perangkat privat memiliki nilai default yang sama untuk atribut sebagai konteks perangkat umum, tetapi aplikasi dapat memodifikasinya kapan saja. Sistem mempertahankan perubahan pada konteks perangkat untuk masa pakai jendela atau sampai aplikasi membuat perubahan tambahan.

Aplikasi dapat mengambil handel ke konteks perangkat privat dengan menggunakan fungsiGetDCkapan saja setelah jendela dibuat. Aplikasi harus mengambil handel hanya sekali. Setelah itu, ia dapat menyimpan dan menggunakan handel berapa kali. Karena konteks perangkat privat bukan bagian dari cache konteks perangkat tampilan, aplikasi tidak perlu merilis konteks perangkat dengan menggunakan fungsiReleaseDC.

Sistem secara otomatis menyesuaikan konteks perangkat untuk mencerminkan perubahan pada jendela, seperti memindahkan atau mengukur ukuran. Ini memastikan bahwa jendela yang tumpang tindih selalu diklip dengan benar; artinya, tidak ada tindakan yang diperlukan oleh aplikasi untuk memastikan kliping. Namun, sistem tidak merevisi konteks perangkat untuk menyertakan wilayah pembaruan. Oleh karena itu, saat memproses pesan WM_PAINT, aplikasi harus menggabungkan wilayah pembaruan baik dengan memanggil BeginPaint atau dengan mengambil wilayah pembaruan dan berpotongan dengan wilayah kliping saat ini. Jika aplikasi tidak memanggil BeginPaint, aplikasi harus secara eksplisit memvalidasi wilayah pembaruan dengan menggunakan fungsi ValidateRect atau ValidateRgn. Jika aplikasi tidak memvalidasi wilayah pembaruan, jendela menerima serangkaian pesan WM_PAINT tanpa akhir.

Karena BeginPaint menyembunyikan tanda sisipan jika jendela menunjukkannya, aplikasi yang memanggil BeginPaint juga harus memanggil fungsi EndPaint untuk memulihkan tanda sisipan. EndPaint tidak berpengaruh lain pada konteks perangkat privat.

Meskipun konteks perangkat privat mudah digunakan, konteks ini intensif memori dalam hal sumber daya sistem, membutuhkan 800 atau lebih byte untuk disimpan. Konteks perangkat privat direkomendasikan saat pertimbangan performa melebihi biaya penyimpanan.

Sistem ini mencakup konteks perangkat privat saat mengirim pesan WM_ERASEBKGND ke aplikasi. Pilihan konteks perangkat privat saat ini, termasuk mode pemetaan, berlaku ketika aplikasi atau sistem memproses pesan-pesan ini. Untuk menghindari efek yang tidak diinginkan, sistem menggunakan koordinat logis saat menghapus latar belakang; misalnya, menggunakan fungsi GetClipBox untuk mengambil koordinat logis area untuk menghapus dan meneruskan koordinat ini ke fungsiFillRect. Aplikasi yang memproses pesan ini dapat menggunakan teknik serupa.

Aplikasi dapat menggunakan fungsiGetDCExuntuk memaksa sistem mengembalikan konteks perangkat umum untuk jendela yang memiliki konteks perangkat privat. Ini berguna untuk melakukan touch-up cepat ke jendela tanpa mengubah nilai atribut konteks perangkat privat saat ini.