L'unione di menu?
Quando un oggetto è attivo all'interno di un contenitore, il protocollo di unione dei menu dei documenti OLE fornisce il controllo completo dell'oggetto del menu di Guida .Di conseguenza, gli argomenti della Guida del contenitore non sono disponibili a meno che l'utente disattivi l'oggetto.L'architettura di contenimento del documento attivo vengono illustrate le regole per l'unione dei menu sul posto consenta sia il contenitore che un documento attivo che è attivo condividere il menu.Nuove regole rappresentano convenzioni semplicemente aggiuntive sul componente proprietario della parte del menu e come il menu condiviso viene costruito.
La nuova convenzione è semplice.Nei documenti attivi, il menu di Guida dispone di due voci di menu di primo livello organizzate come segue:
Help
Container Help >
Object Help >
Ad esempio, quando una sezione di Word è attiva nel Raccoglitore microsoft Office, il menu di Guida quest'ultima come segue:
Help
Binder Help >
Word Help >
Entrambe le voci di menu vengono menu a cascata in cui tutte le voci di menu aggiuntive specifiche del contenitore e all'oggetto vengono fornite all'utente.Gli elementi vengono visualizzati in questo caso sarà diverso con il contenitore e gli oggetti in questione.
Per costruire questo menu combinato di Guida , l'architettura di contenimento del documento attivo modifica la routine normale documenti OLE.A seconda dei documenti OLE, la barra dei menu unita può avere sei gruppi di menu, cioé File, Modifica, Contenitore, Object, Finestra, Guida, in questo ordine.In ogni gruppo, potrebbe contenere zero o più menu.I gruppi File, Contenitoree Finestra appartengono al contenitore e gruppi Modifica, Object, e Guida appartengono all'oggetto.Quando l'oggetto desidera eseguire l'unione di menu, viene creata una barra dei menu vuota e passa al contenitore.Il contenitore viene quindi inserito i relativi menu, chiamando IOleInPlaceFrame::InsertMenus.L'oggetto viene passata una struttura che è una matrice di sei valori LUNGHI (OLEMENUGROUPWIDTHS).Dopo l'inserimento di menu, il contenitore contrassegna il numero di menu ha aggiunto in ognuno dei relativi gruppi e quindi restituisce.Quindi l'oggetto inserisce i relativi menu, prestanti attenzione al conteggio dei menu in ogni gruppo del contenitore.Infine, l'oggetto passa la barra dei menu unita e la matrice (che contiene il numero di menu in ogni gruppo) OLE, che restituisce “un handle opaco di descrittore di menu„.Successivamente le sessioni dell'oggetto che gestiscono e la barra dei menu unita al contenitore, tramite IOleInPlaceFrame::SetMenu.Attualmente, il contenitore visualizzare la barra dei menu unita e si passa l'handle OLE, in modo da OLE possibile fare inviare corretto dei messaggi del menu.
Nella routine modificata del documento attivo, l'oggetto innanzitutto necessario inizializzare gli elementi di OLEMENUGROUPWIDTHS su zero prima di passarle al contenitore.Quindi il contenitore esegue un inserimento normale del menu con un'eccezione: Il contenitore consente di inserire un menu di Guida come ultimo elemento e memorizza un valore di 1 durante l'ultima (sesta) voce della matrice di OLEMENUGROUPWIDTHS ovvero larghezza [5], che appartiene al gruppo della guida dell'oggetto).Questo menu di Guida avrà un solo elemento che rappresenta un sottomenu, “il menu della sovrapposizione di > diContainer Help „ come descritto in precedenza.
L'oggetto viene quindi eseguito il codice normale di inserimento del menu, ma prima di inserire del menu di Guida , controlla la sesta voce della matrice di OLEMENUGROUPWIDTHS .Se il valore è 1 e il nome dell'ultimo menu è Guida (o la stringa localizzata appropriata), l'oggetto inserisce il menu di Guida come sottomenu del menu di Guida del contenitore.
L'oggetto viene quindi imposta il sesto elemento di OLEMENUGROUPWIDTHS su zero e incrementa il quinto elemento da uno.In questo modo OLE si è certi che il menu di Guida appartiene al contenitore e i messaggi del menu che corrispondono al menu (e i relativi menu) devono essere indirizzati al contenitore.Viene quindi la responsabilità del contenitore di inoltro WM_INITMENUPOPUP, WM_SELECT, WM_COMMANDe altri messaggi menu-correlati appartenenti alla parte dell'oggetto del menu di Guida .Questa operazione viene eseguita tramite WM_INITMENU per rimuovere un flag che indica al contenitore se l'utente ha effettuato la navigazione in Guida del menu.Il contenitore a l WM_MENUSELECT per la voce in oppure si esce da qualsiasi elemento nel menu di Guida che il contenitore non ha aggiunto stesso.La voce, significa che l'utente ha effettuato la navigazione in un menu dell'oggetto, pertanto il contenitore imposta “il flag nel menu? object„ e utilizza lo stato del flag per inoltrare qualsiasi WM_MENUSELECT, WM_INITMENUPOPUPe messaggi di WM_COMMAND , come minimo, nella finestra dell'oggetto.(Uscire, il contenitore rimuove il flag e quindi elabora questi stessi messaggi stesso.) Il contenitore deve utilizzare la finestra restituita dalla funzione di IOleInPlaceActiveObejct::GetWindow dell'oggetto come destinazione per questi messaggi.
Se l'oggetto viene rilevato uno zero nel sesto elemento di OLEMENUGROUPWIDTHS, continua in base alle regole normali documenti OLE.Questa procedura vengono illustrati i contenitori che partecipano a unione dei menu di Guida nonché quelli che non fanno.
Quando l'oggetto chiama IOleInPlaceFrame::SetMenu, prima di visualizzare la barra dei menu unita, il contenitore viene verificato se il menu di Guida disponga di un sottomenu aggiuntivo, oltre a cui il contenitore ha inserito.In tal caso, il contenitore consente al relativo menu Guida nella barra dei menu unita.Se il menu di Guida non dispone di un sottomenu aggiuntivo, il contenitore nel menu di Guida la barra dei menu unita.Questa procedura riguarda oggetti che fanno parte di unione dei menu di Guida nonché quelli che non fanno.
Infine, al momento di disassemblare il menu, l'oggetto rimuove il menu inserito di Guida oltre a rimuovere gli altri menu inseriti.Quando il contenitore rimuove i relativi menu, nel menu di Guida oltre agli altri menu che ha inserito.