Bagikan melalui


Kotak Dialog Warna

Menampilkan kotak dialog modal yang memungkinkan pengguna memilih nilai warna tertentu. Pengguna dapat memilih warna dari sekumpulan palet warna dasar atau kustom. Atau, pengguna dapat menghasilkan nilai warna dengan memodifikasi nilai warna RGB atau warna, saturasi, luminositas (HSL) dari antarmuka pengguna kotak dialog. Kotak dialog Warna mengembalikan nilai RGB warna yang dipilih oleh pengguna.

Anda membuat dan menampilkan kotak dialog Warna dengan menginisialisasi strukturCHOOSECOLOR dan meneruskan struktur ke fungsiChooseColor. Dengan mengatur nilai parameter yang berbeda untuk struktur SELECTCOLOR, Anda dapat memengaruhi bagaimana kotak dialog Warna muncul. Misalnya, Anda dapat menampilkan versi antarmuka pengguna lengkap atau parsial dari kotak dialog. Ilustrasi berikut menunjukkan versi antarmuka pengguna lengkap dari kotak dialog Warna.

Jika pengguna mengklik tombol OK, Pilih Warna mengembalikan TRUE. rgbResult anggota strukturCHOOSECOLOR berisi nilai warna RGB warna yang dipilih oleh pengguna. Nilai warna RGB menentukan intensitas warna merah, hijau, dan biru individual yang membentuk warna yang dipilih. Nilai individual berkisar antara 0 hingga 255. GunakanGetRValue, GetGValue, dan GetBValue makro untuk mengekstrak warna individual dari nilai warna RGB.

Jika pengguna membatalkan kotak dialog Warna atau terjadi kesalahan, Pilih Warna mengembalikan FALSE dan anggota rgbResult tidak ditentukan. Untuk menentukan penyebab kesalahan, panggil fungsiCommDlgExtendedError untuk mengambil nilai kesalahan yang diperluas.

Subjek berikut tercakup dalam bagian ini

Kotak Dialog Warna Penuh dan Parsial

Kotak dialog Warna memiliki versi lengkap dan versi parsial antarmuka pengguna. Versi lengkap mencakup kontrol dasar dan memiliki kontrol tambahan yang memungkinkan pengguna membuat warna kustom. Versi parsial memiliki kontrol yang menampilkan palet warna dasar dan kustom tempat pengguna dapat memilih nilai warna.

Versi parsial kotak dialog Warna menyertakan tombol Tentukan Warna Kustom. Pengguna dapat mengklik tombol ini untuk menampilkan versi lengkap. Anda dapat mengarahkan kotak dialog Warna untuk selalu menampilkan versi lengkap dengan mengatur bendera CC_FULLOPEN di Bendera anggota strukturCHOOSECOLOR. Untuk mencegah pengguna membuat warna kustom, Anda dapat mengatur bendera CC_PREVENTFULLOPEN untuk menonaktifkan tombol Tentukan Warna Kustom.

Warna dasar mewakili pilihan warna yang tersedia pada perangkat yang ditentukan. Jumlah aktual warna yang ditampilkan ditentukan oleh pengandar tampilan. Misalnya, driver VGA menampilkan 48 warna, dan driver tampilan monokrom hanya menampilkan 16.

Warna kustom adalah warna yang Anda tentukan atau yang dibuat pengguna. Saat membuat kotak dialog Warna, Anda harus menggunakan lpCustColors anggota strukturCHOOSECOLOR untuk menentukan nilai awal untuk 16 warna kustom. Jika versi lengkap kotak dialog Warna terbuka, pengguna dapat membuat warna kustom dengan salah satu metode berikut:

  • Memindahkan kursor dalam kontrol spektrum warna dan kontrol slide luminositas
  • Mengetik nilai RGB di kontrol edit Red, Green, dan Blue
  • Mengetik nilai HSL di Hue, kontrol edit, dan Lum

Untuk menambahkan warna kustom baru ke tampilan warna kustom, pengguna dapat mengklik tombol Tambahkan ke Warna Kustom. Ini juga menyebabkan kotak dialog menyalin nilai RGB warna baru ke elemen yang sesuai dalam array yang ditunjukkan oleh lpCustColors anggota. Untuk mempertahankan warna kustom baru antara panggilan ke ChooseColor, Anda harus mengalokasikan memori statis untuk array. Untuk informasi selengkapnya tentang model warna RGB dan HSL, lihat Model Warna yang Digunakan oleh Kotak Dialog Warna.

Mengkustomisasi Kotak Dialog Warna

Untuk mengkustomisasi kotak dialog Warna, Anda bisa menggunakan salah satu metode berikut:

  • Tentukan nilai dalam strukturCHOOSECOLOR saat Anda membuat kotak dialog
  • Menyediakan templat kustom
  • Menyediakan prosedur kait

Anda dapat mengubah tampilan dan perilaku kotak dialog Warna dengan mengatur bendera di Bendera anggota strukturCHOOSECOLOR. Misalnya, Anda dapat mengatur bendera CC_SOLIDCOLOR untuk mengarahkan kotak dialog agar hanya menampilkan warna solid. Untuk menyebabkan kotak dialog awalnya memilih warna selain hitam, atur bendera CC_RGBINIT dan tentukan warna di anggota rgbResult.

Anda dapat menyediakan templat kustom untuk kotak dialog Warna, misalnya, jika Anda ingin menyertakan kontrol tambahan yang unik untuk aplikasi Anda. Fungsi ChooseColor menggunakan templat kustom Anda sebagai pengganti templat default.

Untuk menyediakan templat kustom untuk kotak dialog Warna

  1. Buat templat kustom dengan memodifikasi templat default yang ditentukan dalam file Color.dlg. Pengidentifikasi kontrol yang digunakan dalam templat dialog Warna default ditentukan dalam file Color.dlg.
  2. Gunakan strukturCHOOSECOLOR untuk mengaktifkan templat sebagai berikut:
    • Jika templat kustom Anda adalah sumber daya dalam aplikasi atau pustaka tautan dinamis, atur bendera CC_ENABLETEMPLATE di Bendera anggota. Gunakan hInstance dan lpTemplateName anggota struktur untuk mengidentifikasi modul dan nama sumber daya.

      -Atau-

    • Jika templat kustom Anda sudah dalam memori, atur bendera CC_ENABLETEMPLATEHANDLE. Gunakan hInstance anggota untuk mengidentifikasi objek memori yang berisi templat.

Anda dapat menyediakan prosedur kaitCCHookProcuntuk kotak dialog Warna. Prosedur kait dapat memproses pesan yang dikirim ke kotak dialog. Ini juga dapat menggunakan pesan terdaftar untuk mengontrol perilaku kotak dialog. Jika Anda menggunakan templat kustom untuk menentukan kontrol tambahan, Anda harus menyediakan prosedur kait untuk memproses input untuk kontrol Anda.

Untuk mengaktifkan prosedur kait untuk kotak dialog Warna

  1. Atur bendera CC_ENABLEHOOK di Bendera anggota strukturCHOOSECOLOR.
  2. Tentukan alamat prosedur kait di lpfnHook anggota.

Setelah memproses pesan WM_INITDIALOG, prosedur kotak dialog mengirimkan pesan WM_INITDIALOG ke prosedur kait. Parameter lParam pesan ini adalah penunjuk ke strukturSELECTCOLOR yang digunakan untuk menginisialisasi kotak dialog.

Kotak dialog mengirim pesan COLOROKSTRING terdaftar ke prosedur kait saat pengguna mengklik tombol OK. Prosedur kait dapat menolak warna yang dipilih dan memaksa kotak dialog untuk tetap terbuka dengan mengembalikan nol saat menerima pesan ini. Prosedur kait dapat memaksa kotak dialog untuk memilih warna tertentu dengan mengirim SETRGBSTRING pesan terdaftar ke kotak dialog. Untuk menggunakan pesan terdaftar ini, Anda harus meneruskan COLOROKSTRING dan konstanta SETRGBSTRING ke fungsi RegisterWindowMessage untuk mendapatkan pengidentifikasi pesan. Anda kemudian dapat menggunakan pengidentifikasi untuk mendeteksi dan memproses pesan yang dikirim dari kotak dialog, atau untuk mengirim pesan ke kotak dialog.

Model Warna yang Digunakan oleh Kotak Dialog Warna

Ekstensi warna kustom dari kotak dialog Warna memungkinkan pengguna menentukan warna menggunakan nilai RGB atau HSL. Namun, strukturCHOOSECOLOR hanya menggunakan nilai RGB untuk melaporkan warna yang dibuat atau dipilih oleh pengguna.

Model Warna RGB

Model RGB digunakan untuk menunjuk warna untuk layar dan perangkat lain yang memancarkan cahaya. Nilai merah, hijau, dan biru yang valid berkisar antara 0 hingga 255, dengan 0 menunjukkan intensitas minimum dan 255 menunjukkan intensitas maksimum. Ilustrasi berikut menunjukkan bagaimana warna utama merah, hijau, dan biru dapat digabungkan untuk menghasilkan empat warna tambahan. (Untuk perangkat tampilan, warna hitam menghasilkan saat nilai merah, hijau, dan biru diatur ke 0. Dalam teknologi tampilan, hitam adalah tidak adanya semua warna.)

lingkaran merah, hijau, dan biru yang tumpang tindih

Tabel berikut mencantumkan delapan warna model RGB dan nilai RGB terkait.

Warna Nilai RGB
Merah 255, 0, 0
Hijau 0, 255, 0
Biru 0, 0, 255
Cyan 0, 255, 255
Magenta 255, 0, 255
Kuning 255, 255, 0
Putih 255, 255, 255
Hitam 0, 0, 0

 

Sistem menyimpan warna internal sebagai nilai RGB 32-bit yang memiliki bentuk heksadesimal berikut: 0x00bbggrr.

Byte berurutan rendah berisi nilai untuk intensitas relatif merah; byte kedua berisi nilai untuk hijau; dan byte ketiga berisi nilai untuk biru. Byte urutan tinggi harus nol.

Anda dapat menggunakan makroRGBuntuk mendapatkan nilai RGB berdasarkan intensitas yang ditentukan untuk komponen merah, hijau, dan biru. GunakanGetRValue, GetBValue, dan GetGValue makro untuk mengekstrak warna individual dari nilai warna RGB.

Model Warna HSL

Kotak dialog Warna menyediakan kontrol untuk menentukan nilai HSL. Ilustrasi berikut ini memperlihatkan kontrol spektrum warna dan kontrol slide luminositas yang muncul dalam kotak dialog Warna. Ilustrasi ini juga memperlihatkan rentang nilai yang dapat ditentukan pengguna dengan kontrol ini.

spektrum warna dan skala luminositas

Dalam kotak dialog Warna, nilai saturasi dan luminositas harus dalam rentang 0 hingga 240, dan nilai hue harus dalam rentang 0 hingga 239.

Mengonversi Nilai HSL ke Nilai RGB

Prosedur kotak dialog yang disediakan dalam Comdlg32.dll untuk kotak dialog Warna berisi kode yang mengonversi nilai HSL ke nilai RGB terkait. Tabel berikut mencantumkan delapan warna model RGB dan nilai HSL dan RGB terkait.

Warna Nilai HSL Nilai RGB
Merah (0, 240, 120) (255, 0, 0)
Kuning (40, 240, 120) (255, 255, 0)
Hijau (80, 240, 120) (0, 255, 0)
Cyan (120, 240, 120) (0, 255, 255)
Biru (160, 240, 120) (0, 0, 255)
Magenta (200, 240, 120) (255, 0, 255)
Putih (0, 0, 240) (255, 255, 255)
Hitam (0, 0, 0) (0, 0, 0)