Udostępnij za pośrednictwem


Pomoc scalania Menu

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 w miejscu menu scalanie, aby umożliwić aktywnego dokumentu, który jest aktywny udział w menu i kontener.Nowe reguły są po prostu dodatkowe Konwencji, o jakie składnika jest właścicielem jaka część menu i jak jest konstruowana udostępnionego menu.

Nowej Konwencji jest proste.W dokumentach active Pomoc menu ma dwa elementy menu najwyższego poziomu, zorganizowane w sposób następujący:

Help

Container Help >

Object Help >

Na przykład, gdy sekcji programu Word jest aktywny w spinaczu pakietu Office, 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 pojawiają się w tym miejscu będą zróżnicowane kontenera i obiekty zaangażowane.

Do konstruowania to scalone Pomoc menu, architektura zamknięcia aktywnego dokumentu modyfikuje normalnej procedury OLE dokumentów.Zgodnie z dokumentami OLE pasek menu scalone może mieć sześć grup menu, a mianowicie pliku, Edytuj, kontenera, Object, okna, Pomoc, w tym zamówienia.W każdej grupie może być menu zero lub więcej.Grupy pliku, kontenera, i okna należą do pojemnika oraz grupy Edytuj, obiektu, i Pomoc należą do obiektu.Gdy obiekt chce wykonać scalanie menu, tworzy pasek menu puste i przekazuje go do kontenera.Kontener wstawia jego menu, wywołując IOleInPlaceFrame::InsertMenus.Obiekt przechodzi również struktura, która jest tablicą z sześciu wartości długie (OLEMENUGROUPWIDTHS).Po wstawieniu menu, kontener znaków ile menu dodaje się ją w każdym z jego grupy, a następnie zwraca.Następnie obiekt wstawia jego menu, zwracając uwagę na liczbę menu w każdej grupie kontenera.Wreszcie obiekt przekazuje pasek menu scalone i tablicy (który zawiera liczbę menu w każdej grupie) OLE, które zwraca nieprzezroczysty "menu deskryptora" obsługi.Później obiekt przechodzi dojścia i pasek menu scalone do kontenera, via IOleInPlaceFrame::SetMenu.W tej chwili kontenera Wyświetla pasek menu scalone i także przekazuje OLE, uchwyt, tak aby OLE można zrobić właściwego wysłania wiadomości w menu.

W procedurze zmodyfikowanych aktywnego dokumentu, najpierw zainicjować obiektu OLEMENUGROUPWIDTHS elementy do zera przed przekazaniem go do kontenera.Kontener wykona wstawiania normalnej menu z jednym wyjątkiem: wstawia kontenera Pomoc menu jako ostatni element i przechowuje wartość 1 w ostatniej pozycji (szósty) OLEMENUGROUPWIDTHS tablicy (czyli szerokość [5], która należy do grupy pomocy).To Pomoc menu będzie miał tylko jeden element, który jest podmenu, "pomocy kontenera >" menu kaskadowe w sposób opisany wcześniej.

Obiekt jest następnie wykonuje jego kod wstawiania normalnej menu, z wyjątkiem, że przed wstawieniem jej Pomoc menu sprawdza szósty wpisu OLEMENUGROUPWIDTHS tablicy.Wartość 1, jeśli nazwa ostatniego menu jest Pomoc (lub odpowiednie zlokalizowane ciąg), a następnie wstawia obiekt jego Pomoc menu jako podmenu kontenera Pomoc menu.

Obiekt następnie ustawia szósty element OLEMENUGROUPWIDTHS do zera i zwiększa piąty element o jeden.Umożliwia to wiedzieć, że OLE Pomoc menu należy do kontenera i wiadomości menu odpowiadające tym menu (i jego podmenu) powinny być umieszczane w kontenerze.Następnie jest odpowiedzialny za kontener do przesyłania dalej WM_INITMENUPOPUP, WM_SELECT, WM_COMMANDi inne komunikaty związane z menu, które należą do części obiektu Pomoc menu.Jest to realizowane za pomocą WM_INITMENU Wyczyść flagę, informujących kontenera, czy użytkownik dotarł do obiektu Pomoc menu.Kontener następnie zegarki WM_MENUSELECT dla wejścia lub wyjścia z dowolnego elementu na Pomoc pojemnik sam nie dodano menu.W zapisie, oznacza to użytkownik dotarł do menu Obiekt kontenera ustawia flagę "w menu Pomoc obiektu" i używa stan tej flagi, aby przesyłać dowolną WM_MENUSELECT, WM_INITMENUPOPUP, i WM_COMMAND wiadomości, jako minimum, do okna obiektu.(Przy wyjeździe kontenera czyści flagę i następnie przetwarza te wiadomości w tym samym sobie.) Kontener, należy użyć okna zwrócony z obiektu IOleInPlaceActiveObejct::GetWindow jako miejsce docelowe dla tych wiadomości.

Jeśli obiekt wykrywa zero w szóstym element OLEMENUGROUPWIDTHS, przeprowadzane zgodnie z normalnych zasad OLE dokumentów.Ta procedura obejmuje kontenerów, które uczestniczą w Pomoc menu scalanie, jak również te, które nie.

Gdy wywołuje obiekt IOleInPlaceFrame::SetMenu, zanim wyświetlanie menu scalone bar, kontrole kontenera czy Pomoc menu zawiera podmenu dodatkowe, oprócz co wstawił kontenera.Jeśli tak, pozostawia kontenera jej 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 pora do przekształcenia z menu Obiekt usuwa wstawionego Pomoc menu oprócz usuwanie drugiej dodaje menu.Gdy kontener usuwa jego menu, spowoduje usunięcie jej Pomoc menu obok menu, które ma dodaje się.

Zobacz też

Koncepcje

Aktywny dokument kontenerów