Menerapkan Objek COM Menu Konteks

Ekstensi menu konteks adalah objek COM yang diimplementasikan sebagai server in-proc. Ekstensi menu konteks harus mengimplementasikan antarmuka IShellExtInit dan IContextMenu. Ekstensi menu konteks dibuat saat pengguna menampilkan menu konteks untuk objek kelas tempat ekstensi menu konteks telah didaftarkan.

Menerapkan IShellExtInit

Setelah objek COM ekstensi menu konteks dibuat, metode IShellExtInit::Initialize dipanggil. IShellExtInit::Initialize menyediakan ekstensi menu konteks dengan objek IDataObject yang berisi data yang berkaitan dengan objek direktori tempat menu konteks berlaku.

IDataObject berisi data dalam format CFSTR_DSOBJECTNAMES. Format data CFSTR_DSOBJECTNAMES adalah HGLOBAL yang berisi struktur DSOBJECTNAMES. Struktur DSOBJECTNAMES berisi data tentang objek direktori tempat ekstensi lembar properti diterapkan.

IDataObject juga berisi data dalam format CFSTR_DS_DISPLAY_SPEC_OPTIONS. Format data CFSTR_DS_DISPLAY_SPEC_OPTIONS adalah HGLOBAL yang berisi struktur DSDISPLAYSPECOPTIONS. DSDISPLAYSPECOPTIONS berisi data konfigurasi untuk digunakan oleh ekstensi.

Jika ada nilai selain S_OK yang dikembalikan dari IShellExtInit::Initialize, ekstensi menu konteks tidak akan digunakan.

Parameter pidlFolder dan hkeyProgID dari metode IShellExtInit::Initialize tidak digunakan.

Menerapkan IContextMenu

Setelah IShellExtInit::Initialize kembali, metode IContextMenu::QueryContextMenu dipanggil untuk mendapatkan item menu atau item yang akan ditambahkan ekstensi menu konteks. Implementasi QueryContextMenu cukup mudah. Ekstensi menu konteks menambahkan item menunya menggunakan InsertMenuItem atau fungsi serupa. Pengidentifikasi perintah menu harus lebih besar dari atau sama dengan idCmdFirst dan harus kurang dari idCmdLast. QueryContextMenu harus mengembalikan pengidentifikasi numerik terbesar yang ditambahkan ke menu plus satu. Cara terbaik untuk menetapkan pengidentifikasi perintah menu adalah dengan memulai dari nol dan bekerja secara berurutan. Jika ekstensi menu konteks tidak perlu item menu apa pun, seharusnya tidak menambahkan item apa pun ke menu dan mengembalikan nol dari QueryContextMenu.

IContextMenu::GetCommandString dipanggil untuk mengambil data tekstual untuk item menu, seperti teks bantuan yang akan ditampilkan untuk item menu. Ada kemungkinan bahwa host menu konteks akan menggunakan string Unicode saat ekstensi menggunakan string ANSI. Karena itu, kasus GCS_HELPTEXTA, GCS_HELPTEXTW, GCS_VERBA, dan GCS_VERBW harus ditangani secara individual. Implementasi metode ini bersifat opsional.

IContextMenu::InvokeCommand dipanggil ketika salah satu item menu yang diinstal oleh ekstensi menu konteks dipilih. Menu konteks melakukan atau memulai tindakan yang diinginkan sebagai respons terhadap metode ini.