Delen via


Help-menu Samenvoegen

Wanneer een object actief is in een container, geeft het menu samenvoegingsprotocol van OLE-documenten het object volledige controle over het Menu Help . Als gevolg hiervan zijn de Help-onderwerpen van de container niet beschikbaar, tenzij de gebruiker het object deactiveert. De actieve documentomvangsarchitectuur wordt uitgebreid met de regels voor het samenvoegen van in-place menu's, zodat zowel de container als een actief document het menu kunnen delen. De nieuwe regels zijn gewoon aanvullende conventies over welk onderdeel eigenaar is van het menu en hoe het gedeelde menu wordt samengesteld.

De nieuwe conventie is eenvoudig. In actieve documenten bevat het Menu Help twee menu-items op het hoogste niveau die als volgt zijn ingedeeld:

Help

Container Help >

Object Help >

Als een Word-sectie bijvoorbeeld actief is in de Office Binder, wordt het Menu Help als volgt weergegeven:

Help

Binder Help >

Word Help >

Beide menu-items zijn trapsgewijze menu's waaronder eventuele extra menu-items die specifiek zijn voor de container en het object aan de gebruiker worden verstrekt. Welke items hier worden weergegeven, verschilt per container en objecten.

Als u dit samengevoegde Help-menu wilt maken, wijzigt de actieve documentbesluitingsarchitectuur de normale OLE-documentenprocedure. Volgens OLE-documenten kan de samengevoegde menubalk zes groepen menu's bevatten, namelijk Bestand, Bewerken, Container, Object, Venster, Help, in die volgorde. In elke groep kunnen er nul of meer menu's zijn. Het groepsbestand, de container en het venster behoren tot de container en de groepen Bewerken, Object en Help behoren tot het object. Wanneer het object menu wil samenvoegen, wordt er een lege menubalk gemaakt en aan de container doorgegeven. De container voegt vervolgens de menu's in door aan te roepen IOleInPlaceFrame::InsertMenus. Het object geeft ook een structuur door die een matrix is van zes LANGE waarden (OLEMENUGROUPWIDTHS). Nadat de menu's zijn ingevoegd, geeft de container aan hoeveel menu's aan elk van de groepen zijn toegevoegd en keert vervolgens terug. Vervolgens voegt het object de menu's in, waarbij aandacht wordt besteed aan het aantal menu's in elke containergroep. Ten slotte geeft het object de samengevoegde menubalk en de matrix (die het aantal menu's in elke groep bevat) door aan OLE, dat een ondoorzichtige 'menudescriptor'-ingang retourneert. Later geeft het object die ingang en de samengevoegde menubalk door aan de container via IOleInPlaceFrame::SetMenu. Op dit moment geeft de container de samengevoegde menubalk weer en wordt de ingang ook doorgegeven aan OLE, zodat OLE de juiste verzending van menuberichten kan uitvoeren.

In de gewijzigde actieve documentprocedure moet het object eerst de OLEMENUGROUPWIDTHS-elementen initialiseren naar nul voordat het wordt doorgegeven aan de container. Vervolgens voert de container een normale menu-invoeging uit met één uitzondering: De container voegt een Help-menu in als laatste item en slaat een waarde op van 1 in de laatste (zesde) vermelding van de OLEMENUGROUPWIDTHS-matrix (dat wil gezegd, breedte[5], die deel uitmaakt van de Help-groep van het object). Dit Help-menu bevat slechts één item dat een submenu is, het trapsgewijs menu Container Help>, zoals eerder beschreven.

Het object voert vervolgens de normale menu-invoegcode uit, behalve dat voordat het het Help-menu invoegt, de zesde vermelding van de OLEMENUGROUPWIDTHS-array wordt gecontroleerd. Als de waarde 1 is en de naam van het laatste menu Help is (of de juiste gelokaliseerde tekenreeks), wordt het menu Help van het object ingevoegd als submenu van het Menu Help van de container.

Vervolgens stelt het object het zesde element van OLEMENUGROUPWIDTHS in op nul en wordt het vijfde element met één verhoogd. Dit laat OLE weten dat het Menu Help deel uitmaakt van de container en dat de menuberichten die overeenkomen met dat menu (en de bijbehorende submenu's) naar de container moeten worden gerouteerd. Het is vervolgens de verantwoordelijkheid van de container om WM_INITMENUPOPUP, WM_SELECT, WM_COMMAND en andere menugerelateerde berichten die deel uitmaken van het objectgedeelte van het Menu Help door te sturen. Dit wordt bereikt door WM_INITMENU te gebruiken om een vlag te wissen waarmee de container wordt aangegeven of de gebruiker naar het Help-menu van het object is genavigeerd. De container bekijkt vervolgens WM_MENUSELECT voor betreden van of verlaten van een item in het Helpmenu dat de container niet zelf heeft toegevoegd. Bij vermelding betekent dit dat de gebruiker naar een objectmenu is genavigeerd, zodat de container de vlag 'in het Menu Help voor objecten' instelt en de status van die vlag gebruikt om alle WM_MENUSELECT, WM_INITMENUPOPUP en WM_COMMAND berichten, als minimum, door te sturen naar het objectvenster. (Bij het afsluiten wist de container de vlag en verwerkt het daarna zelf dezelfde berichten.) De container moet het venster dat wordt geretourneerd door de functie IOleInPlaceActiveObejct::GetWindow van het object gebruiken als bestemming voor deze berichten.

Als het object een nul detecteert in het zesde element van OLEMENUGROUPWIDTHS, wordt het uitgevoerd volgens de normale OLE-documentenregels. In deze procedure worden containers behandeld die deelnemen aan het Help-menu evenals containers die daar niet aan deelnemen.

Wanneer het object wordt aangeroepen IOleInPlaceFrame::SetMenuvoordat de samengevoegde menubalk wordt weergegeven, controleert de container of het Menu Help een extra submenu heeft, naast wat de container heeft ingevoegd. Zo ja, dan laat de container het Help-menu in de samengevoegde menubalk staan. Als het Menu Help geen extra submenu heeft, wordt het Help-menu van de container verwijderd uit de samengevoegde menubalk. In deze procedure worden objecten behandeld die deelnemen aan het Help menu, evenals objecten die daar niet aan deelnemen.

Als het tijd is om het menu te demonteren, verwijdert het object het ingevoegde Help-menu naast het verwijderen van de andere ingevoegde menu's. Wanneer de container de menu's verwijdert, wordt het Help-menu verwijderd naast de andere menu's die de container heeft ingevoegd.

Zie ook

Actieve documentcontainers