Bagikan melalui


Palet Sistem

Sistem mempertahankan palet sistem untuk setiap perangkat yang menggunakan palet. Palet sistem berisi nilai warna untuk semua warna yang saat ini dapat ditampilkan atau digambar oleh perangkat. Selain melihat isi palet sistem, aplikasi tidak dapat mengakses palet sistem secara langsung. Sebaliknya, sistem memiliki kontrol penuh atas palet sistem dan mengizinkan akses hanya melalui penggunaan palet logis.

Aplikasi dapat melihat konten palet sistem dengan menggunakan fungsi GetSystemPaletteEntries . Fungsi ini mengambil isi dari satu atau beberapa entri, hingga jumlah total entri dalam palet sistem. Total selalu sama dengan angka yang dikembalikan untuk nilai SIZEPALETTE oleh fungsi GetDeviceCaps dan sama dengan ukuran maksimum untuk palet logis tertentu.

Meskipun aplikasi tidak dapat mengubah warna dalam palet sistem secara langsung, aplikasi dapat menyebabkan perubahan saat mewujudkan palet logis. Untuk mewujudkan palet, sistem memeriksa setiap warna yang diminta dan mencoba menemukan entri di palet sistem yang berisi kecocokan yang tepat. Jika sistem menemukan warna yang cocok, sistem memetakan indeks palet logis ke indeks palet sistem yang sesuai. Jika sistem tidak menemukan kecocokan yang tepat, sistem menyalin warna yang diminta ke entri palet sistem yang tidak digunakan sebelum memetakan indeks. Jika semua entri palet sistem sedang digunakan, sistem memetakan indeks palet logis ke entri palet sistem yang warnanya paling cocok dengan warna yang diminta. Setelah pemetaan ini diatur, aplikasi tidak dapat mengambil alihnya. Misalnya, aplikasi tidak dapat menggunakan indeks palet sistem untuk menentukan warna; hanya indeks palet logis yang diizinkan.

Aplikasi dapat memodifikasi cara indeks dipetakan dengan mengatur anggota peFlags dari struktur PALETTEENTRY ke nilai yang dipilih saat membuat palet logis. Misalnya, bendera PC_NOCOLLAPSE mengarahkan sistem untuk segera menyalin warna yang diminta ke entri palet sistem yang tidak digunakan terlepas dari apakah entri palet sistem sudah berisi warna tersebut. Selain itu, bendera PC_EXPLICIT mengarahkan sistem untuk memetakan indeks palet logis ke indeks palet sistem yang diberikan secara eksplisit. (Aplikasi ini memberikan indeks palet sistem dalam kata urutan rendah struktur PALETTEENTRY .)

Palet dapat diwujudkan sebagai palet latar belakang atau palet latar depan dengan menentukan TRUE atau FALSE masing-masing untuk parameter bForceBackground dalam fungsi SelectPalette . Hanya ada satu palet latar depan dalam sistem pada satu waktu. Jika jendela adalah jendela yang saat ini aktif atau keturunan jendela yang saat ini aktif, jendela tersebut dapat mewujudkan palet latar depan. Jika tidak, palet diwujudkan sebagai palet latar belakang terlepas dari nilai parameter bForceBackground . Properti penting dari palet latar depan adalah bahwa, ketika direalisasikan, dapat menimpa semua entri (kecuali untuk entri statis) di palet sistem. Sistem menyelesaikan ini dengan menandai semua entri yang tidak statis dalam palet sistem seperti yang tidak digunakan sebelum realisasi palet latar depan, sehingga menghilangkan semua entri yang digunakan. Tidak ada pra-pemrosesan yang terjadi pada palet sistem untuk realisasi palet latar belakang. Palet latar depan mengatur semua kemungkinan warna nonstatis. Palet latar belakang hanya dapat mengatur apa yang tetap terbuka dan diprioritaskan dengan cara first-come, first-serve. Biasanya, aplikasi menggunakan palet latar belakang untuk jendela anak yang mewujudkan palet masing-masing. Ini membantu meminimalkan jumlah perubahan yang terjadi pada palet sistem.

Entri palet sistem yang tidak digunakan adalah entri apa pun yang tidak dicadangkan dan tidak berisi warna statis. Entri yang dipesan secara eksplisit ditandai dengan nilai PC_RESERVED. Entri ini dibuat ketika aplikasi mewujudkan palet logis untuk animasi palet. Entri warna statis dibuat oleh sistem dan sesuai dengan warna di palet default. Fungsi GetDeviceCaps dapat digunakan untuk mengambil nilai NUMRESERVED, yang menentukan jumlah entri palet sistem yang disediakan untuk warna statis.

Karena palet sistem memiliki jumlah entri yang terbatas, memilih dan mewujudkan palet logis untuk perangkat tertentu dapat memengaruhi warna yang terkait dengan palet logis lainnya untuk perangkat yang sama. Perubahan warna ini sangat dramatis ketika terjadi pada layar. Aplikasi dapat memastikan bahwa warna yang wajar digunakan untuk palet logis yang saat ini dipilih dengan mengatur ulang palet sebelum setiap penggunaan. Aplikasi mengatur ulang palet dengan memanggil fungsi UnrealizeObject dan RealisasiPalette . Menggunakan fungsi-fungsi ini menyebabkan sistem memetakan ulang warna di palet logis ke warna yang wajar di palet sistem.