Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat objek aktif dalam kontainer, protokol penggabungan menu Dokumen OLE memberi objek kontrol penuh dari menu Bantuan . Akibatnya, topik Bantuan kontainer tidak tersedia kecuali pengguna menonaktifkan objek. Arsitektur penampungan dokumen aktif memperluas aturan penggabungan menu secara langsung untuk memungkinkan kontainer dan dokumen yang aktif berbagi menu. Aturan baru hanyalah konvensi tambahan tentang komponen apa yang memiliki bagian mana dari menu dan bagaimana menu bersama dibangun.
Konvensi baru ini sederhana. Di dokumen aktif, menu Bantuan memiliki dua item menu tingkat atas yang diatur sebagai berikut:
Help
Container Help >
Object Help >
Misalnya, saat bagian Word aktif di Office Binder, maka menu Bantuan akan muncul sebagai berikut:
Help
Binder Help >
Word Help >
Kedua item menu adalah menu cascading di mana item menu tambahan yang khusus untuk kontainer dan objek disediakan untuk pengguna. Item apa yang muncul di sini akan bervariasi menurut kontainer dan objek yang terlibat.
Untuk membuat menu Bantuan gabungan ini, arsitektur penampungan dokumen aktif memodifikasi prosedur Dokumen OLE normal. Menurut Dokumen OLE, bilah menu gabungan dapat memiliki enam grup menu, yaitu File, Edit, Kontainer, Objek, Jendela, Bantuan, dalam urutan tersebut. Di setiap grup, bisa ada nol menu atau lebih.
Grup File, Kontainer, dan Jendela milik kontainer dan grup Edit, Objek, dan Bantuan milik objek. Ketika objek ingin melakukan penggabungan menu, objek akan membuat bilah menu kosong dan meneruskannya ke kontainer. Kontainer kemudian menyisipkan menunya, dengan memanggil IOleInPlaceFrame::InsertMenus. Objek juga melewati struktur yang merupakan array dari enam nilai LONG (OLEMENUGROUPWIDTHS). Setelah menyisipkan menu, kontainer menandai berapa banyak menu yang ditambahkan di setiap grupnya, lalu kembali. Kemudian objek menyisipkan menunya, memperhatikan jumlah menu di setiap grup kontainer. Terakhir, objek melewatkan bilah menu yang telah digabungkan dan array (yang berisi jumlah menu di setiap grup) ke OLE, yang mengembalikan sebuah "handle deskriptor menu" buram. Kemudian, objek tersebut meneruskan pegangan dan bilah menu yang digabungkan ke kontainer melalui IOleInPlaceFrame::SetMenu. Saat ini, kontainer menampilkan bilah menu gabungan dan juga meneruskan handle ke OLE, sehingga OLE dapat melakukan pengolahan pesan menu yang tepat.
Dalam prosedur dokumen aktif yang dimodifikasi, objek harus terlebih dahulu menginisialisasi elemen OLEMENUGROUPWIDTHS menjadi nol sebelum meneruskannya ke kontainer. Kemudian kontainer melakukan penyisipan menu normal dengan satu pengecualian: Kontainer menyisipkan menu Bantuan sebagai item terakhir dan menyimpan nilai 1 dalam entri terakhir (keenam) dari array OLEMENUGROUPWIDTHS (yaitu, lebar[5], yang termasuk dalam grup Bantuan objek). Menu Bantuan ini hanya akan memiliki satu item yang merupakan submenu, menu kaskade "Bantuan> Kontainer" seperti yang dijelaskan sebelumnya.
Objek kemudian menjalankan kode penyisipan menu normalnya, kecuali sebelum menyisipkan menu Bantuannya , objek memeriksa entri keenam array OLEMENUGROUPWIDTHS . Jika nilainya adalah 1 dan nama menu terakhir adalah Bantuan (atau string yang dilokalkan yang sesuai), maka objek menyisipkan menu Bantuannya sebagai submenu menu Bantuan kontainer.
Objek kemudian mengatur elemen keenam OLEMENUGROUPWIDTHS ke nol dan menambah elemen kelima satu per satu. Ini memungkinkan OLE tahu bahwa menu Bantuan milik kontainer dan pesan menu yang sesuai dengan menu tersebut (dan submenunya) harus dirutekan ke kontainer. Kemudian, kontainer bertanggung jawab untuk meneruskan WM_INITMENUPOPUP, WM_SELECT, WM_COMMAND, dan pesan terkait menu lainnya yang termasuk dalam bagian objek dari menu Bantuan . Ini dicapai dengan menggunakan WM_INITMENU untuk menghapus bendera yang memberi tahu kontainer apakah pengguna telah menavigasi ke menu Bantuan objek. Kontainer kemudian mengawasi WM_MENUSELECT untuk masuk atau keluar dari item apa pun pada menu Bantuan yang tidak ditambahkan kontainer itu sendiri. Pada entri, itu berarti pengguna telah menavigasi ke menu objek, sehingga kontainer mengatur bendera "di menu Bantuan objek" dan menggunakan status bendera tersebut untuk meneruskan pesan WM_MENUSELECT, WM_INITMENUPOPUP, dan WM_COMMAND , sebagai minimum, ke jendela objek. (Saat keluar, kontainer menghapus bendera dan kemudian memproses pesan yang sama ini sendiri.) Kontainer harus menggunakan jendela yang dikembalikan dari fungsi objek IOleInPlaceActiveObejct::GetWindow sebagai tujuan untuk pesan-pesan ini.
Jika objek mendeteksi nol dalam elemen keenam OLEMENUGROUPWIDTHS, objek akan dilanjutkan sesuai dengan aturan Dokumen OLE normal. Prosedur ini mencakup kontainer yang berpartisipasi dalam penggabungan menu Bantuan serta yang tidak.
Ketika objek memanggil IOleInPlaceFrame::SetMenu, sebelum menampilkan bilah menu gabungan, kontainer memeriksa apakah menu Bantuan memiliki submenu tambahan, selain apa yang telah dimasukkan kontainer. Jika demikian, kontainer meninggalkan menu Bantuannya di bilah menu gabungan. Jika menu Bantuan tidak memiliki submenu tambahan, kontainer akan menghapus menu Bantuannya dari bilah menu gabungan. Prosedur ini mencakup objek yang berpartisipasi dalam penggabungan menu Bantuan serta yang tidak.
Akhirnya, ketika sudah waktunya untuk membongkar menu, objek menghapus menu Bantuan yang disisipkan selain menghapus menu lain yang disisipkan. Ketika kontainer menghapus menunya, kontainer akan menghapus menu Bantuan selain menu lain yang telah dimasukkannya.