Tentang Kontrol ComboBoxEx

Kontrol ComboBoxEx adalah kontrol kotak kombo yang menyediakan dukungan asli untuk gambar item. Untuk membuat gambar item mudah diakses, kontrol menyediakan dukungan daftar gambar. Dengan menggunakan kontrol ini, Anda dapat menyediakan fungsionalitas kotak kombo tanpa harus menggambar grafik item secara manual.

Topik ini berisi bagian berikut.

Membuat Kontrol ComboBoxEx

Secara efektif, kontrol ComboBoxEx membuat kotak kombo anak dan melakukan tugas gambar pemilik untuk Anda berdasarkan daftar gambar yang ditetapkan. Oleh karena itu, gaya CBS_OWNERDRAWFIXED tersirat dan tidak perlu menggunakannya saat membuat kontrol. Karena daftar gambar digunakan untuk menyediakan grafik item, gaya CBS_OWNERDRAWVARIABLE tidak dapat digunakan.

Kontrol ComboBoxEx harus diinisialisasi dengan memanggil fungsi InitCommonControlsEx, menentukan ICC_USEREX_CLASSES dalam struktur INITCOMMONCONTROLSEX yang menyertainya.

Anda dapat membuat kontrol ComboBoxEx dengan menggunakan fungsi CreateWindowEx dan menentukan WC_COMBOBOXEX sebagai kelas jendela. Kelas terdaftar ketika fungsi InitCommonControlsEx dipanggil seperti yang dijelaskan di atas.

Kontrol ComboBoxEx dibuat tanpa daftar gambar default. Untuk menggunakan gambar item, Anda harus membuat daftar gambar untuk kontrol ComboBoxEx dan menetapkannya ke kontrol menggunakan pesan CBEM_SETIMAGELIST. Jika Anda tidak menetapkan daftar gambar ke kontrol ComboBoxEx, kontrol hanya menampilkan teks item.

Gaya Kontrol ComboBoxEx

Kontrol ComboBoxEx hanya mendukung gaya ComboBox berikut:

  • CBS_SIMPLE
  • CBS_DROPDOWN
  • CBS_DROPDOWNLIST
  • WS_CHILD

Ada juga beberapa ComboBoxEx Control Extended Styles yang hanya digunakan oleh ComboBoxEx.

Catatan

Gaya CBS_SIMPLE mungkin tidak berfungsi dengan baik dalam beberapa kasus.

 

Karena kontrol ComboBoxEx melakukan tugas gambar pemilik untuk Anda berdasarkan daftar gambar yang ditetapkan, gaya CBS_OWNERDRAWFIXED tersirat; Anda tidak perlu menggunakannya saat membuat kontrol. Karena daftar gambar digunakan untuk menyediakan grafik item, gaya CBS_OWNERDRAWVARIABLE tidak dapat digunakan. Kontrol ComboBoxEx juga mendukung ComboBoxEx Control Extended Styles yang menyediakan fitur tambahan.

Item Kontrol ComboBoxEx

Kontrol ComboBoxEx mempertahankan informasi item menggunakan struktur COMBOBOXEXITEM. Struktur ini mencakup anggota untuk indeks item, indeks gambar (normal, status pilihan, dan overlay), nilai indentasi, string teks, dan nilai khusus item.

Kontrol ComboBoxEx menyediakan akses mudah ke dan manipulasi item melalui olahpesan. Untuk menambahkan atau menghapus item, kirim pesan CBEM_INSERTITEM atau CBEM_DELETEITEM. Anda dapat mengubah item yang saat ini berada di kontrol menggunakan pesan CBEM_SETITEM.

Item Panggilan Balik

Kontrol ComboBoxEx mendukung atribut item panggilan balik. Anda dapat menentukan item sebagai item panggilan balik saat menambahkannya ke kontrol menggunakan CBEM_INSERTITEM. Saat Menetapkan nilai ke struktur COMBOBOXEXITEM item, Anda harus menentukan nilai bendera panggilan balik yang sesuai. Berikut ini adalah anggota struktur COMBOBOXEXITEM dan nilai bendera panggilan balik yang sesuai.

Anggota Nilai panggilan balik
pszText LPSTR_TEXTCALLBACK
iImage I_IMAGECALLBACK
iSelectedImage I_IMAGECALLBACK
iOverlay I_IMAGECALLBACK
iIndent I_INDENTCALLBACK

 

Kontrol akan meminta informasi tentang item panggilan balik dengan mengirim kode pemberitahuan CBEN_GETDISPINFO . Pemberitahuan ini dikirim dalam bentuk pesan WM_NOTIFY. Ketika aplikasi Anda memproses pesan ini, aplikasi harus memberikan informasi yang diminta untuk kontrol. Jika Anda mengatur anggota mask struktur COMBOBOXEXITEM yang menyertainya ke CBEIF_DI_SETITEM, kontrol akan menyimpan data item dan tidak akan memintanya lagi.

Daftar Gambar Kontrol ComboBoxEx

Jika Anda ingin kontrol ComboBoxEx menampilkan ikon dengan item, Anda harus menyediakan daftar gambar. Kontrol ComboBoxEx mendukung hingga tiga gambar untuk item—satu untuk status yang dipilih, satu untuk status tidak dipilih, dan satu untuk gambar overlay. Tetapkan daftar gambar yang sudah ada ke kontrol ComboBoxEx menggunakan pesan CBEM_SETIMAGELIST.

Struktur COMBOBOXEXITEM berisi anggota yang mewakili indeks gambar untuk setiap daftar gambar (dipilih, tidak dipilih, dan overlay). Untuk setiap item, atur anggota ini untuk menampilkan gambar yang diinginkan. Tidak perlu menentukan indeks gambar untuk setiap jenis gambar. Anda dapat mencampur dan mencocokkan jenis gambar sesuka Anda, tetapi selalu atur anggota mask dari struktur COMBOBOXEXITEM untuk menunjukkan anggota mana yang digunakan. Kontrol mengabaikan anggota yang belum ditandai sebagai valid.

Catatan

Jika Anda menggunakan gaya CBS_SIMPLE , ikon tidak ditampilkan.

 

Tentang Pesan Pemberitahuan Kontrol ComboBoxEx

Kontrol ComboBoxEx mengirim pesan pemberitahuan untuk melaporkan perubahan dalam dirinya sendiri atau untuk meminta informasi item panggilan balik. Induk kontrol menerima semua pesan WM_COMMAND dari kotak kombo yang terkandung dalam kontrol ComboBoxEx. Kontrol ComboBoxEx mengirimkan pemberitahuannya sendiri menggunakan pesan WM_NOTIFY. Akibatnya, pemilik kontrol harus siap untuk memproses kedua bentuk pesan pemberitahuan.

Berikut ini adalah kode pemberitahuan khusus ComboBoxEx yang dikirim melalui pesan WM_NOTIFY.

Pemberitahuan Keterangan
CBEN_BEGINEDIT Memberi sinyal bahwa pengguna telah mengaktifkan daftar drop-down atau mengklik di kotak edit kontrol.
CBEN_ENDEDIT Memberi sinyal bahwa pengguna telah memilih item dari daftar drop-down atau telah menyimpulkan operasi edit dalam kotak edit.
CBEN_DELETEITEM Melaporkan bahwa item telah dihapus.
CBEN_GETDISPINFO Meminta informasi tentang atribut item.
CBEN_INSERTITEM Memberi sinyal bahwa item disisipkan dalam kontrol.

 

Penerusan Pesan Kontrol ComboBoxEx

Berikut ini adalah pesan kotak kombo standar yang diteruskan kontrol ComboBoxEx ke kotak kombo turunannya. Beberapa pesan ini dapat diproses oleh kontrol ComboBoxEx baik sebelum atau sesudah pesan diteruskan.

Berikut ini adalah pesan windows yang diteruskan kontrol ComboBoxEx ke jendela induknya:

  • WM_COMMAND (Ini mencakup semua pemberitahuan CBN_.)
  • WM_NOTIFY