Udostępnij za pośrednictwem


Scalanie menu Pomoc

Gdy obiekt jest aktywny w kontenerze, menu scalanie protokół OLE dokumentów daje obiektu pełną kontrolę nad Pomoc menu.W efekcie tematy pomocy kontenera nie są dostępne, chyba że użytkownik dezaktywuje obiektu.Architektura zamknięcia aktywnego dokumentu rozszerza się na zasady menu w miejscu scalanie zezwalająca na kontenerze jak również aktywnego dokumentu, który jest aktywny udział w menu.Nowe reguły są po prostu dodatkowe Konwencji o co składnik jest właścicielem jaka część menu i jak jest skonstruowany udostępnionego menu.

Nowa Konwencja jest proste.W dokumentach active Pomoc menu ma dwie pozycje menu najwyższego poziomu zorganizowane w sposób następujący:

Help

Container Help >

Object Help >

Na przykład, kiedy jest aktywny w module Office Binder sekcji programu Word, a następnie Pomoc menu pojawią się w następujący sposób:

Help

Binder Help >

Word Help >

Oba elementy menu są menu kaskadowe, w których wszystkie elementy menu dodatkowe, specyficzne dla kontenera i obiektu są dostarczane do użytkownika.Jakie elementy są wyświetlane w tym polu zależy od kontenera i obiektów związanych.

Do konstruowania to scalone Pomoc menu, architektura zamknięcia aktywnego dokumentu modyfikuje normalnej procedury OLE dokumentów.Według dokumentów OLE, na pasku menu scalone może mieć sześć grup menu, a mianowicie pliku, edytować, kontenera, Object, okna, Pomoc, w tym zamówienia.W każdej z tych grup może być zero lub więcej menu.Grupy pliku, kontenera, i okna należą do pojemnika i grup edytować, obiektu, i Pomoc należą do obiektu.Gdy chce zrobić scalania menu Obiekt tworzy pasek menu puste i przekazuje je do pojemnika.Kontener następnie wstawia jego menu, wywołując IOleInPlaceFrame::InsertMenus.Obiekt przechodzi również strukturę, która jest tablicą z sześciu wartości długie (OLEMENUGROUPWIDTHS).Po wstawieniu menu, kontener znaki jak dużo menu dodanych go w każdym z jego grupy, a następnie zwraca wartość.Następnie obiekt wstawia jego menu, zwracając uwagę na liczbę menu w każdej grupie kontenera.Wreszcie obiekt przechodzi pasek menu scalone i tablicy (który zawiera liczbę menu w każdej grupie) OLE, które zwraca o nieprzezroczyste "menu descriptor" obsługi.Później obiekt przechodzi dojścia i paska menu scalone do kontenera, via IOleInPlaceFrame::SetMenu.W tej chwili kontener Wyświetla pasek menu scalone i również przechodzi uchwyt na OLE, tak że OLE zrobić właściwego wysyłania wiadomości menu.

W procedurze zmodyfikowanego aktywnego dokumentu, najpierw zainicjować obiektu OLEMENUGROUPWIDTHS elementy do zera przed przekazaniem ich do kontenera.Kontener wykona wstawiania normalne menu z jednym wyjątkiem: wstawianych przez kontener Pomoc menu jako ostatni element i przechowuje wartość 1 w ostatnim wpisie (szósty) OLEMENUGROUPWIDTHS tablicy (czyli szerokość [5], który należy do grupy pomocy obiektu).To Pomoc menu będzie mieć tylko jeden element, który jest podmenu, "Pomoc kontener>" menu kaskadowe opisanej wcześniej.

Obiekt następnie wykonuje jego kod wstawiania normalne menu, chyba że przed wstawieniem jej Pomoc menu, sprawdza szóstego wpisu OLEMENUGROUPWIDTHS tablicy.Jeśli wartość wynosi 1, a nazwa ostatniego menu jest Pomoc (lub odpowiedni ciąg zlokalizowane), a następnie wstawia obiekt jego Pomoc menu jako podmenu kontener Pomoc menu.

Obiekt następnie ustawia szósty element OLEMENUGROUPWIDTHS do zera i inkrementuje piąty element o jeden.Dzięki temu OLE wiedzieć, że Pomoc menu należy do pojemnika i wiadomości menu odpowiadające tym menu (i jego podmenu) powinny być kierowane do kontenera.Następnie to kontener obowiązek przekazania WM_INITMENUPOPUP, WM_SELECT, WM_COMMANDi inne komunikaty związane z menu, które należą do obiektu część Pomoc menu.Jest to realizowane za pomocą WM_INITMENU , aby je wyczyścić flagę informujących kontenera, czy użytkownik dotarł do obiektu Pomoc menu.Następnie zegarki kontener WM_MENUSELECT dla wejścia lub wyjścia z dowolnym elemencie Pomoc menu, w którym kontener różniła się.Na wejściu, oznacza to użytkownik dotarł do menu obiekt, więc kontenera ustawia flagę "w menu Pomoc obiektu" i używa do przekazania dowolny stan tej flagi WM_MENUSELECT, WM_INITMENUPOPUP, i WM_COMMAND wiadomości, co najmniej do okna obiektu. (Przy wyjeździe, kontener czyści flagę i przetwarza następnie te komunikaty sam sobie). Pojemnik należy używać okna zwrócone z obiektu IOleInPlaceActiveObejct::GetWindow funkcjonować jako miejsce docelowe dla tych wiadomości.

Jeśli obiekt wykrywa zero w szóstym element OLEMENUGROUPWIDTHS, wpływy zgodnie ze zwykłymi regułami OLE dokumentów.Ta procedura obejmuje kontenerów, które uczestniczą w Pomoc menu scalanie, jak również te, które nie.

Kiedy wywołuje obiekt IOleInPlaceFrame::SetMenu, zanim czy wyświetlanie pasek kontroli kontenera scalonego menu Pomoc menu zawiera podmenu dodatkowe, oprócz co kontener zostały wstawione.Jeśli tak, pozostawia kontenera jego Pomoc menu na pasku menu scalone.Jeśli Pomoc menu nie ma dodatkowych podmenu, kontener spowoduje usunięcie jej Pomoc menu z paska menu scalone.Ta procedura obejmuje obiekty, które uczestniczą w Pomoc menu scalanie, jak również te, które nie.

Wreszcie, kiedy to czas demontażu menu Obiekt usuwa wstawionego Pomoc menu w wyniku usunięcia drugiej dodaje menu.Gdy kontener usuwa jego menu, spowoduje usunięcie jej Pomoc menu oprócz innych menu, które zostały wstawione.

Zobacz też

Koncepcje

Kontenery dokumentów aktywnych