Bagikan melalui


Menangani Pemberitahuan Kustomisasi

Kontrol umum toolbar Windows memiliki fitur kustomisasi bawaan, termasuk kotak dialog kustomisasi yang ditentukan sistem, yang memungkinkan pengguna menyisipkan, menghapus, atau menyusun ulang tombol toolbar. Aplikasi menentukan apakah fitur kustomisasi tersedia dan mengontrol sejauh mana pengguna dapat menyesuaikan toolbar.

Anda dapat membuat fitur kustomisasi ini tersedia untuk pengguna dengan memberikan toolbar gaya CCS_ADJUSTABLE . Fitur kustomisasi memungkinkan pengguna untuk menyeret tombol ke posisi baru atau menghapus tombol dengan menyeretnya dari toolbar. Selain itu, pengguna dapat mengklik dua kali toolbar untuk menampilkan kotak dialog Kustomisasi Bilah Alat , yang memungkinkan pengguna untuk menambahkan, menghapus, dan menyusun ulang tombol toolbar. Aplikasi dapat menampilkan kotak dialog dengan menggunakan fungsi Kustomisasi anggota.

Kontrol toolbar mengirim pesan pemberitahuan ke jendela induk di setiap langkah dalam proses penyesuaian. Jika pengguna menahan tombol SHIFT ke bawah dan mulai menyeret tombol, toolbar secara otomatis menangani operasi seret. Toolbar mengirimkan pesan pemberitahuan TBN_QUERYDELETE ke jendela induk untuk menentukan apakah tombol dapat dihapus. Operasi seret berakhir jika jendela induk mengembalikan FALSE. Jika tidak, toolbar mengambil input mouse dan menunggu pengguna melepaskan tombol mouse.

Ketika pengguna melepaskan tombol mouse, kontrol toolbar menentukan lokasi kursor mouse. Jika kursor berada di luar toolbar, tombol akan dihapus. Jika kursor berada di tombol toolbar lain, toolbar mengirimkan pesan pemberitahuan TBN_QUERYINSERT ke jendela induk untuk menentukan apakah tombol dapat disisipkan di sebelah kiri tombol yang diberikan. Tombol disisipkan jika jendela induk mengembalikan TRUE; jika tidak, itu tidak. Toolbar mengirimkan pesan pemberitahuan TBN_TOOLBARCHANGE untuk memberi sinyal akhir operasi seret.

Jika pengguna memulai operasi seret tanpa menahan tombol SHIFT, kontrol toolbar akan mengirim pesan pemberitahuan TBN_BEGINDRAG ke jendela pemilik. Aplikasi yang mengimplementasikan kode penyeretan tombolnya sendiri dapat menggunakan pesan ini sebagai sinyal untuk memulai operasi seret. Toolbar mengirimkan pesan pemberitahuan TBN_ENDDRAG untuk memberi sinyal akhir operasi seret.

Kontrol bilah alat mengirim pesan pemberitahuan saat pengguna mengkustomisasi toolbar dengan menggunakan kotak dialog Kustomisasi Bilah Alat . Toolbar mengirim pesan pemberitahuan TBN_BEGINADJUST setelah pengguna mengklik dua kali toolbar, tetapi sebelum kotak dialog dibuat. Selanjutnya, toolbar mulai mengirim serangkaian pesan pemberitahuan TBN_QUERYINSERT untuk menentukan apakah toolbar memungkinkan tombol untuk disisipkan. Saat jendela induk mengembalikan TRUE, toolbar berhenti mengirim pesan pemberitahuan TBN_QUERYINSERT . Jika jendela induk tidak mengembalikan TRUE untuk tombol apa pun, toolbar akan menghancurkan kotak dialog.

Selanjutnya, kontrol toolbar menentukan apakah ada tombol yang dapat dihapus dari toolbar dengan mengirim satu pesan pemberitahuan TBN_QUERYDELETE untuk setiap tombol di toolbar. Jendela induk mengembalikan TRUE untuk menunjukkan bahwa tombol dapat dihapus; jika tidak, jendela tersebut mengembalikan FALSE. Bilah alat menambahkan semua tombol toolbar ke kotak dialog, tetapi berwarna abu-abu yang mungkin tidak dihapus.

Setiap kali kontrol toolbar memerlukan informasi tentang tombol dalam kotak dialog Kustomisasi Toolbar, kontrol toolbar akan mengirim pesan pemberitahuan TBN_GETBUTTONINFO , menentukan indeks tombol yang memerlukan informasi dan alamat struktur TBNOTIFY . Jendela induk harus mengisi struktur dengan informasi yang relevan.

Kotak dialog Kustomisasi Bilah Alat menyertakan tombol Bantuan dan tombol Reset. Saat pengguna memilih tombol Bantuan, kontrol toolbar mengirimkan pesan pemberitahuan TBN_CUSTHELP . Jendela induk harus merespons dengan menampilkan informasi bantuan. Kotak dialog mengirim pesan pemberitahuan TBN_RESET saat pengguna memilih tombol Reset. Pesan ini menandakan bahwa toolbar akan menginisialisasi ulang kotak dialog.

Pesan-pesan ini semuanya WM_NOTIFY pesan, dan dapat ditangani di jendela pemilik Anda dengan menambahkan entri peta pesan dari formulir berikut ke peta pesan jendela pemilik Anda:

ON_NOTIFY( wNotifyCode, idControl, memberFxn )
  • wNotifyCode

    Kode pengidentifikasi pesan pemberitahuan, seperti TBN_BEGINADJUST.

  • idControl

    Pengidentifikasi kontrol yang mengirim pemberitahuan.

  • memberFxn

    Fungsi anggota yang akan dipanggil ketika pemberitahuan ini diterima.

Fungsi anggota Anda akan dideklarasikan dengan prototipe berikut:

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );

Jika handler pesan pemberitahuan mengembalikan nilai, itu harus meletakkannya di LRESULT yang ditujukkan oleh hasil.

Untuk setiap pesan, pNotifyStruct arahkan ke struktur NMHDR atau struktur TBNOTIFY . Struktur ini dijelaskan di bawah ini:

Struktur NMHDR berisi anggota berikut:

typedef struct tagNMHDR {
    HWND hwndFrom;  // handle of control sending message
    UINT idFrom;// identifier of control sending message
    UINT code;  // notification code; see below
} NMHDR;
  • hwndFrom

    Handel jendela kontrol yang mengirim pemberitahuan. Untuk mengonversi handel ini ke CWnd penunjuk, gunakan CWnd::FromHandle.

  • idDari

    Pengidentifikasi kontrol yang mengirim pemberitahuan.

  • code

    Kode pemberitahuan. Anggota ini bisa menjadi nilai khusus untuk jenis kontrol, seperti TBN_BEGINADJUST atau TTN_NEEDTEXT, atau bisa menjadi salah satu nilai pemberitahuan umum yang tercantum di bawah ini:

    • NM_CLICK Pengguna telah mengklik tombol mouse kiri dalam kontrol.

    • NM_DBLCLK Pengguna telah mengeklik dua kali tombol mouse kiri dalam kontrol.

    • NM_KILLFOCUS Kontrol telah kehilangan fokus input.

    • NM_OUTOFMEMORY Kontrol tidak dapat menyelesaikan operasi karena tidak tersedia cukup memori.

    • NM_RCLICK Pengguna telah mengklik tombol kanan mouse dalam kontrol.

    • NM_RDBLCLK Pengguna telah mengklik dua kali tombol kanan mouse dalam kontrol.

    • NM_RETURN Kontrol memiliki fokus input, dan pengguna telah menekan tombol ENTER.

    • NM_SETFOCUS Kontrol telah menerima fokus input.

Struktur TBNOTIFY berisi anggota berikut:

typedef struct {
    NMHDR hdr; // information common to all WM_NOTIFY messages
    int iItem; // index of button associated with notification
    TBBUTTON tbButton; // info about button associated withnotification
    int cchText;   // count of characters in button text
    LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
  • Hdr

    Informasi umum untuk semua pesan WM_NOTIFY .

  • iItem

    Indeks tombol yang terkait dengan pemberitahuan.

  • tbButton

    Struktur TBBUTTON yang berisi informasi tentang tombol toolbar yang terkait dengan pemberitahuan.

  • cchText

    Jumlah karakter dalam teks tombol.

  • lpszText

    Teks penunjuk ke tombol.

Pemberitahuan yang dikirim toolbar adalah sebagai berikut:

  • TBN_BEGINADJUST

    Dikirim saat pengguna mulai menyesuaikan kontrol toolbar. Pointer menunjuk ke struktur NMHDR yang berisi informasi tentang pemberitahuan. Handler tidak perlu mengembalikan nilai tertentu.

  • TBN_BEGINDRAG

    Dikirim saat pengguna mulai menyeret tombol dalam kontrol toolbar. Penunjuk menunjuk ke struktur TBNOTIFY . Anggota iItem berisi indeks berbasis nol tombol yang diseret. Handler tidak perlu mengembalikan nilai tertentu.

  • TBN_CUSTHELP

    Dikirim saat pengguna memilih tombol Bantuan dalam kotak dialog Kustomisasi Bilah Alat. Tidak ada nilai yang ditampilkan. Pointer menunjuk ke struktur NMHDR yang berisi informasi tentang pesan pemberitahuan. Handler tidak perlu mengembalikan nilai tertentu.

  • TBN_ENDADJUST

    Dikirim saat pengguna berhenti menyesuaikan kontrol toolbar. Pointer menunjuk ke struktur NMHDR yang berisi informasi tentang pesan pemberitahuan. Handler tidak perlu mengembalikan nilai tertentu.

  • TBN_ENDDRAG

    Dikirim saat pengguna berhenti menyeret tombol dalam kontrol toolbar. Penunjuk menunjuk ke struktur TBNOTIFY . Anggota iItem berisi indeks berbasis nol tombol yang diseret. Handler tidak perlu mengembalikan nilai tertentu.

  • TBN_GETBUTTONINFO

    Dikirim saat pengguna menyesuaikan kontrol toolbar. Bilah alat menggunakan pesan pemberitahuan ini untuk mengambil informasi yang diperlukan oleh kotak dialog Kustomisasi Bilah Alat. Penunjuk menunjuk ke struktur TBNOTIFY . Anggota iItem menentukan indeks berbasis nol tombol. Anggota pszText dan cchText menentukan alamat dan panjang, dalam karakter, dari teks tombol saat ini. Aplikasi harus mengisi struktur dengan informasi tentang tombol . Kembalikan TRUE jika informasi tombol disalin ke struktur, atau FALSE sebaliknya.

  • TBN_QUERYDELETE

    Dikirim saat pengguna mengkustomisasi bilah alat untuk menentukan apakah tombol dapat dihapus dari kontrol toolbar. Penunjuk menunjuk ke struktur TBNOTIFY . Anggota iItem berisi indeks berbasis nol tombol yang akan dihapus. Kembalikan TRUE untuk memungkinkan tombol dihapus atau FALSE untuk mencegah tombol dihapus.

  • TBN_QUERYINSERT

    Dikirim saat pengguna menyesuaikan kontrol toolbar untuk menentukan apakah tombol dapat disisipkan di sebelah kiri tombol yang diberikan. Penunjuk menunjuk ke struktur TBNOTIFY . Anggota iItem berisi indeks berbasis nol tombol yang akan disisipkan. Kembalikan TRUE untuk memungkinkan tombol disisipkan di depan tombol yang diberikan atau FALSE untuk mencegah tombol disisipkan.

  • TBN_RESET

    Dikirim saat pengguna mereset konten kotak dialog Kustomisasi Bilah Alat. Pointer menunjuk ke struktur NMHDR yang berisi informasi tentang pesan pemberitahuan. Handler tidak perlu mengembalikan nilai tertentu.

  • TBN_TOOLBARCHANGE

    Dikirim setelah pengguna menyesuaikan kontrol toolbar. Pointer menunjuk ke struktur NMHDR yang berisi informasi tentang pesan pemberitahuan. Handler tidak perlu mengembalikan nilai tertentu.

Baca juga

Menggunakan CToolBarctrl
Kontrol