Slučování nabídek nápovědy
Pokud objekt je aktivní v rámci kontejneru, v nabídce protokol OLE dokumentů sloučením poskytuje úplnou kontrolu objektu pomoci nabídky.Témata nápovědy kontejneru v důsledku toho nejsou k dispozici, pokud uživatel deaktivuje objektu.Pravidla pro sloučení do kontejneru a aktivní dokument, který je aktivní v nabídce sdílet nabídky v místě rozšiřují architektura uzavření aktivního dokumentu.Nová pravidla jsou jednoduše dalších úmluv o jakou součást vlastní části nabídky a jak je vytvořen sdílené nabídky.
Nové úmluvy je jednoduché.V aktivní dokumenty pomoci nabídka obsahuje dvě položky nabídky nejvyšší úrovně uspořádán následujícím způsobem:
Help
Container Help >
Object Help >
Pokud oddíl aplikace Word je například aktivní v aplikaci Office Binder pak bude pomoci nabídky vypadat takto:
Help
Binder Help >
Word Help >
Obě položky nabídky jsou kaskádové nabídky, za kterých jsou poskytovány žádné další položky nabídky specifické pro kontejner a objekt uživatele.Jaké položky se zobrazí v tomto poli závisí na kontejner a objekty zahrnuté.
K vytvoření tohoto sloučení pomoci běžný postup OLE dokumenty upravuje nabídky architektura uzavření aktivního dokumentu.Podle dokumenty OLE, sloučené nabídek mít šest skupin nabídek, a to souboru, Upravit, kontejner, Object, okna, pomoci, v tomto pořadí.V každé skupině může být nula nebo více nabídek.Skupiny souboru, kontejner, a okna patří do kontejneru a skupiny Upravit, objektu, a pomoci patří k objektu.Pokud objekt chce provést sloučení v nabídce, vytvoří prázdné nabídek a předává do kontejneru.Nádoby vloží své nabídky voláním IOleInPlaceFrame::InsertMenus.Objekt také předává strukturu, která je šest dlouhé hodnoty pole (OLEMENUGROUPWIDTHS).Po vložení nabídky, označí kontejner kolik nabídek bude přidána do každé ze své skupiny a pak se vrátí.Potom vloží objekt nabídky, důrazem na počet nabídek v každé skupině kontejneru.Nakonec objekt předá sloučené nabídek a matice (který obsahuje počet nabídek v každé skupině) OLE, která vrátí neprůhledné "popisovač nabídky" zpracování.Později objekt popisovače a sloučené nabídek do kontejneru prostřednictvím předá IOleInPlaceFrame::SetMenu.V tomto okamžiku kontejneru zobrazí sloučené nabídek a také předává popisovač OLE, takže OLE lze provést správné odesílání zpráv nabídky.
V postupu upraveného dokumentu aktivní, musíte nejprve inicializovat objekt OLEMENUGROUPWIDTHS prvky na nulu před jeho odesláním do kontejneru.Pak kontejner provádí běžné nabídce kurzor s jednou výjimkou: Vloží kontejner pomoci jako poslední položka nabídky a ukládá hodnotu 1 v poslední položky (šestá) OLEMENUGROUPWIDTHS pole (to znamená, že šířka [5], který patří do skupiny objektu nápovědy).To pomoci nabídky budou mít pouze jednu položku, která je do podnabídky "Kontejneru pomoci>" kaskády nabídek podle výše uvedených pokynů.
Provede jeho kód vložení normální nabídky, s výjimkou, že před vložením objektu jeho pomoci nabídce kontroluje šestý vstup OLEMENUGROUPWIDTHS pole.Pokud je hodnota 1 a název poslední nabídky pomoci (nebo odpovídající lokalizované řetězce), pak vloží objekt jeho pomoci nabídce, podnabídce kontejneru pomoci nabídky.
Objekt pak nastaví šestý element OLEMENUGROUPWIDTHS na nulu a pátý element zvýší o jednu.To umožňuje OLE vědět, že pomoci nabídky patří do kontejneru a nabídka zprávy odpovídající této nabídky (a jejích podnabídek) by měly být směrovány do kontejneru.Je pak předat odpovědnost kontejneru WM_INITMENUPOPUP, WM_SELECT, WM_COMMANDa další související nabídky zprávy, které patří do části objektu pomoci nabídky.To lze provést pomocí WM_INITMENU Chcete-li vymazat příznak, který určuje kontejner, zda uživatel přešel do objektu pomoci nabídky.Kontejner pak sleduje WM_MENUSELECT vstupu nebo výstupu z libovolné položky v pomoci nabídce kontejneru nebyla přidána sama.V položce rozumí uživatel neprovede navigaci do nabídky objekt kontejneru nastaví příznak "v nabídce Nápověda objekt" a používá tento příznak stavu předávat všechny WM_MENUSELECT, WM_INITMENUPOPUP, a WM_COMMAND zprávy, alespoň do objektu okna. (Při ukončení, kontejner vymaže příznak a potom zpracuje tyto stejné zprávy sám.) Kontejner by měl použít okno vrácená z objektu IOleInPlaceActiveObejct::GetWindow fungovat jako cíl pro tyto zprávy.
Pokud objekt zjistí nulové šestého prvku OLEMENUGROUPWIDTHS, se postupuje podle obvyklých pravidel dokumenty OLE.Tento postup se týká kontejnerů, které jsou součástí pomoci nabídky slučování a nejsou.
Když objekt volá IOleInPlaceFrame::SetMenu, před zobrazením sloučená nabídka panel kontejner kontroly zda pomoci nabídka obsahuje další podnabídky, vedle kontejneru, které je vložil.Pokud tedy kontejner opustí své pomoci nabídky v řádku nabídek sloučené.Pokud pomoci nabídce nemá další podnabídky, dojde k odebrání kontejneru jeho pomoci nabídky na panelu nabídek sloučené.Tento postup se vztahuje na objekty, které jsou součástí pomoci nabídky slučování a nejsou.
Nakonec, když je čas na převod ze strojového kódu v nabídce, objektu odebere vloženého pomoci nabídky vedle druhé odebrání vložené nabídky.Pokud nádoby se odebere jeho nabídky, odeberete jeho pomoci nabídky kromě nabídky, která obsahuje vložené.