Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Knihovna MFC (Microsoft Foundation Classes) se nadále podporuje. Už ale nepřidáme funkce ani aktualizujeme dokumentaci.
Pokud je objekt v kontejneru aktivní, slučovací protokol nabídky dokumentů OLE dává objektu úplnou kontrolu nad nabídkou Nápovědy. V důsledku toho nejsou témata nápovědy kontejneru k dispozici, pokud uživatel objekt neaktivuje. Architektura aktivního dokumentu rozšiřuje pravidla pro integraci místní nabídky, což umožňuje sdílení nabídky mezi kontejnerem a aktivně otevřeným dokumentem. Nová pravidla jsou jednoduše další konvence o tom, která součást nabídky vlastní a jak je sdílená nabídka vytvořena.
Nová konvence je jednoduchá. V aktivních dokumentech má nabídka Pomoc dvě položky hlavní nabídky uspořádány následovně:
Help
Container Help >
Object Help >
Pokud je například oddíl Wordu aktivní v aplikaci Office Binder, zobrazí se nabídka Nápověda takto:
Help
Binder Help >
Word Help >
Obě položky nabídky jsou kaskádové nabídky, pod kterými jsou pro uživatele k dispozici všechny další položky nabídky specifické pro kontejner a objekt. Jaké položky se zde zobrazí, se budou lišit podle použitého kontejneru a předmětů.
Chcete-li vytvořit tuto sloučenou nabídku nápovědy , architektura zahrnutí aktivního dokumentu upraví normální proceduru dokumentů OLE. Podle OLE Documents může sloučený řádek nabídek obsahovat šest skupin nabídek, konkrétně Soubor, Upravit, Kontejner, Objekt, Okno, Nápověda, v daném pořadí. V každé skupině může existovat nula nebo více nabídek. Skupiny Soubor, Kontejner a Okno patří do kontejneru a skupiny Upravit, Objekt a Nápověda patří do objektu. Když objekt chce sloučit nabídku, vytvoří prázdný řádek nabídek a předá ho kontejneru. Kontejner pak vloží menu voláním IOleInPlaceFrame::InsertMenus. Objekt také předává strukturu, která je pole šesti DLOUHÝch hodnot (OLEMENUGROUPWIDTHS). Po vložení nabídek označí kontejner počet nabídek, které přidal do každé z jejích skupin, a pak se vrátí. Objekt pak vloží své nabídky a věnuje pozornost počtu nabídek v každé skupině kontejnerů. Objekt nakonec předá OLE sloučený řádek nabídek a pole, které obsahuje počet nabídek v každé skupině. OLE vrátí neprůhledný „popisovač nabídky“. Později objekt předá tento popisovač a sloučený panel nabídek kontejneru pomocí IOleInPlaceFrame::SetMenu. V tuto chvíli kontejner zobrazí sloučený řádek nabídek a také předá popisovač OLE, aby OLE mohl provádět správné odesílání zpráv nabídky.
V proceduře upraveného aktivního dokumentu musí objekt nejprve inicializovat elementy OLEMENUGROUPWIDTHS na nulu, před tím než je předá do kontejneru. Kontejner pak provede normální vložení nabídky s jednou výjimkou: Kontejner vloží nabídku Nápovědy jako poslední položku a uloží hodnotu 1 do poslední (šesté) položky pole OLEMENUGROUPWIDTHS (to znamená width[5], která patří do skupiny nápovědy objektu). Tato nabídka nápovědy bude obsahovat pouze jednu položku, což je podnabídka , kaskádová nabídka "Nápověda> kontejneru", jak jsme popsali dříve.
Objekt pak spustí svůj normální kód vložení nabídky s tím rozdílem, že před vložením nabídky nápovědy zkontroluje šestou položku pole OLEMENUGROUPWIDTHS . Pokud je hodnota 1 a název poslední nabídky je Nápověda (nebo příslušný lokalizovaný řetězec), objekt vloží nabídku nápovědy jako podnabídku nabídky nápovědy kontejneru.
Objekt pak nastaví šestý prvek OLEMENUGROUPWIDTHS na nulu a zvýší pátý prvek o jeden. Ole informuje o tom, že nabídka nápovědy patří do kontejneru a zprávy nabídky odpovídající dané nabídce (a její podnabídky) by se měly směrovat do kontejneru. Kontejner pak zodpovídá za přeposílání WM_INITMENUPOPUP, WM_SELECT, WM_COMMAND a dalších zpráv souvisejících s nabídkou, které patří do části nabídky Nápověda objektu. Toho se dosahuje pomocí WM_INITMENU k vymazání příznaku, který kontejneru říká, jestli uživatel přešel do nabídky nápovědy objektu. Kontejner pak sleduje WM_MENUSELECT pro vstup do jakékoli položky v nabídce Nápověda nebo ukončení z jakékoli položky, kterou kontejner nepřidal sám. Při zadávání to znamená, že uživatel přešel do nabídky objektu, takže kontejner nastaví příznak "in object Help menu" a používá stav tohoto příznaku k přeposílání všech WM_MENUSELECT, WM_INITMENUPOPUP a WM_COMMAND zpráv, jako minimum, do okna objektu. (Jakmile kontejner ukončí činnost, vymaže příznak a pak zpracuje tyto stejné zprávy sám.) Kontejner by měl jako cíl pro tyto zprávy použít okno vrácené funkcí objektu IOleInPlaceActiveObejct::GetWindow.
Pokud objekt zjistí nulu v šestém prvku OLEMENUGROUPWIDTHS, pokračuje podle normálních pravidel OLE Documents. Tento postup se zabývá kontejnery, které se účastní slučování nabídek nápovědy, i těmi, které se neúčastní.
Při volání IOleInPlaceFrame::SetMenuobjektu před zobrazením sloučeného řádku nabídek kontejner zkontroluje, zda má nabídka Nápověda další podnabídku, kromě toho, co kontejner vložil. Pokud ano, kontejner opustí nabídku nápovědy v řádku sloučených nabídek. Pokud nabídka Nápověda nemá další podnabídku, kontejner odebere nabídku nápovědy ze sloučeného řádku nabídek. Tento postup popisuje objekty, které se účastní slučování nabídky nápovědy , stejně jako ty, které ne.
A konečně, když je čas rozebrat nabídku, objekt odebere vloženou nabídku nápovědy kromě odebrání ostatních vložených nabídek. Když kontejner odebere své nabídky, odebere kromě dalších vložených nabídek i svoji nabídku Nápovědy.