Nápověda nabídky slučování
Pokud je aktivní v rámci kontejneru objektu, nabídka slučování protokol OLE dokumentů poskytuje objekt úplnou kontrolu nad pomoci nabídce.Témata nápovědy kontejneru, proto nejsou k dispozici, pokud uživatel deaktivuje objektu.Pravidla pro místní nabídky slučování povolit kontejneru a aktivní dokument, který je aktivní v nabídce sdílet rozšiřují architektura uzavření aktivního dokumentu.Nová pravidla jsou jednoduše další konvence, o jakou součást vlastní části nabídky a jak je vyrobeno sdílené nabídky.
Nové úmluvy je jednoduché.Aktivní dokumenty pomoci nabídka obsahuje dvě položky nabídky nejvyšší úrovně uspořádán takto:
Help
Container Help >
Object Help >
Například pokud oddíl aplikace Word je aktivní v pořadači, pak bude pomoci nabídka vypadat takto:
Help
Binder Help >
Word Help >
Obě položky nabídky jsou kaskádové nabídky, za kterých jsou poskytovány žádné položky další nabídky specifické pro kontejner a objekt uživatele.Jaké položky se zobrazí zde budou lišit s kontejneru a objekty zapojené.
Vytvořit toto sloučené pomoci nabídce architektura uzavření aktivního dokumentu změní běžný postup dokumenty OLE.Podle dokumenty OLE, sloučené nabídek můžete mít šest skupiny nabídek, totiž soubor, Upravit, kontejner, Object, okno, pomoci, v tomto pořadí.V každé skupině může být nula nebo více nabídek.Skupiny soubor, kontejner, a okno patří do kontejneru a skupin Upravit, objektu, a pomoci patří k objektu.Pokud objekt chce provést sloučení nabídky, vytvoří prázdné nabídek a předává do kontejneru.Kontejner vloží své nabídky voláním IOleInPlaceFrame::InsertMenus.Objekt také prochází strukturu, která je matice šest dlouhé hodnoty (OLEMENUGROUPWIDTHS).Po vložení nabídky kontejneru označí kolik nabídek je přidána do každého z jeho skupiny a pak se vrátí.Potom vloží objekt jeho nabídky pozornost počet nabídek v každé skupině kontejneru.Nakonec objekt předává sloučené nabídek a pole (který obsahuje počet nabídek v každé skupině) OLE, které vrátí o neprůhledné "popisovač nabídky" zpracování.Později objekt popisovače a sloučené nabídek 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 řádné odesílání zpráv nabídky.
V postupu upravený aktivního dokumentu musíte nejprve inicializovat objekt OLEMENUGROUPWIDTHS prvky nulové před předáním do kontejneru.Pak kontejneru provádí běžné nabídce kurzor s jednou výjimkou: kontejner vloží Nápověda jako poslední položka nabídky a ukládá hodnotu 1 v poslední položce (šesté) OLEMENUGROUPWIDTHS array (, šířka [5], který patří do skupiny nápovědy objektu).To pomoci nabídce bude mít pouze jednu položku, která je podnabídka, "kontejner pomoci >" kaskády nabídky výše popsané.
Objekt pak provede jeho vložení kódu běžné nabídky kromě před vložením jeho pomoci nabídce kontroluje šestého vstupu OLEMENUGROUPWIDTHS pole.Pokud je hodnota 1 a název poslední nabídky pomoci (nebo odpovídající řetězce lokalizovány) vloží objekt a potom jeho pomoci nabídky jako podnabídky kontejneru pomoci nabídce.
Objekt poté nastaví šestého prvek OLEMENUGROUPWIDTHS na nulu a pátý element se zvýší o jednu.Díky OLE vědět, že pomoci nabídce patří do kontejneru a nabídce zprávy odpovídající nabídku (a jejích podnabídek) by měla být směrovány do kontejneru.Je pak předat odpovědnost na kontejner WM_INITMENUPOPUP, WM_SELECT, WM_COMMANDa další související nabídky zprávy, které patří do části objektu pomoci nabídce.To lze provést pomocí WM_INITMENU zrušte příznak informující kontejneru, zda uživatel přešel do objektu pomoci nabídce.Kontejner pak sleduje WM_MENUSELECT vstupu nebo výstupu z libovolné položky na pomoci nabídky kontejneru nebyla přidána sama.Na vstupu, rozumí uživatel přešel do nabídky objektu kontejneru nastaví příznak "v nabídce Nápověda objekt" a používá stav tohoto příznaku předávat žádné WM_MENUSELECT, WM_INITMENUPOPUP, a WM_COMMAND zprávy minimálně do okna objektu.(Ukončení, kontejner vymaže příznak a potom zpracuje tyto stejné zprávy sám) Kontejner používejte okno vrácená z objektu IOleInPlaceActiveObejct::GetWindow jako cíl pro tyto zprávy.
Pokud objekt zjistí nulové šestého prvku OLEMENUGROUPWIDTHS, pokračuje podle obvyklých pravidel dokumenty OLE.Tento postup se vztahuje na nádoby, které se účastní pomoci nabídce sloučení stejně jako ty, které nemají.
Při volání objektu IOleInPlaceFrame::SetMenu, před zobrazení sloučených nabídek, kontejner kontroly, zda pomoci nabídka obsahuje další podnabídka, vedle kontejneru, které je vložil.Pokud ano, kontejner opustí své pomoci nabídku v řádku nabídek sloučené.Pokud pomoci nabídce není další podnabídka, nádoby se odebere jeho pomoci sloučené nabídek z nabídky.Tento postup se vztahuje na objekty, které se účastní pomoci nabídce sloučení stejně jako ty, které nemají.
Nakonec při čas rozebírat v nabídce objekt odstraní vloženého pomoci nabídce vedle druhé odebrání vložené nabídky.Pokud nádoby se odebere jeho nabídky, bude odebrána jeho pomoci nabídce vedle nabídky, které má vložit.