Menu i zasoby: scalanie menu
W tym artykule szczegółowo opisano kroki niezbędne dla aplikacji dokumentów OLE do prawidłowego edytowania wizualizacji i prawidłowej aktywacji w miejscu. Aktywacja w miejscu stanowi wyzwanie zarówno dla aplikacji kontenera, jak i serwera (składnika). Użytkownik pozostaje w tym samym oknie ramki (w kontekście dokumentu kontenera), ale w rzeczywistości uruchamia inną aplikację (serwer). Wymaga to koordynacji między zasobami kontenera i aplikacji serwera.
Tematy omówione w tym artykule obejmują:
Pierwszym krokiem jest koordynowanie układów menu. Aplikacje kontenerów powinny utworzyć nowe menu, które będzie używane tylko wtedy, gdy osadzone elementy są aktywowane. Co najmniej to menu powinno składać się z następujących elementów w podanej kolejności:
Menu Plik identyczne z tym, które jest używane podczas otwierania plików. (Zazwyczaj żadne inne elementy menu nie są umieszczane przed następnym elementem).
Dwa kolejne separatory.
Menu okna identyczne z tym, które jest używane, gdy pliki są otwarte (tylko wtedy, gdy aplikacja kontenera w aplikacji MDI). Niektóre aplikacje mogą mieć inne menu, takie jak menu Opcje, które należy do tej grupy, które pozostaje w menu po aktywowaniu osadzonego elementu.
Uwaga
Mogą istnieć inne menu, które wpływają na widok dokumentu kontenera, takie jak Zoom. Te menu kontenera są wyświetlane między dwoma separatorami w tym zasobie menu.
Aplikacje serwera (składników) powinny również utworzyć nowe menu przeznaczone specjalnie do aktywacji w miejscu. Powinien on być podobny do menu używanego podczas otwierania plików, ale bez elementów menu, takich jak Plik i okno, które manipulują dokumentem serwera zamiast danych. Zazwyczaj to menu składa się z następujących elementów:
Edytuj menu identyczne z tym, które jest używane podczas otwierania plików.
Separator.
Menu edycji obiektów, takie jak menu Pióro w przykładowej aplikacji Scribble.
Separator.
Menu Pomoc.
Na przykład przyjrzyj się układowi przykładowych menu w miejscu dla kontenera i serwera. Szczegóły każdego elementu menu zostały usunięte, aby wyjaśnić przykład. Menu kontenera w miejscu zawiera następujące wpisy:
IDR_CONTAINERTYPE_CNTR_IP MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File C1"
MENUITEM SEPARATOR
POPUP "&Zoom C2"
MENUITEM SEPARATOR
POPUP "&Options C3"
POPUP "&Window C3"
END
Kolejne separatory wskazują, gdzie powinna znajdować się pierwsza część menu serwera. Teraz przyjrzyj się menu serwera w miejscu:
IDR_SERVERTYPE_SRVR_IP MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&Edit S1"
MENUITEM SEPARATOR
POPUP "&Format S2"
MENUITEM SEPARATOR
POPUP "&Help S3"
END
Separatory w tym miejscu wskazują, gdzie powinna zostać wybrana druga grupa elementów menu kontenera. Wynikowa struktura menu po aktywowaniu obiektu z tego serwera wewnątrz tego kontenera wygląda następująco:
BEGIN
POPUP "&File C1"
POPUP "&Edit S1"
POPUP "&Zoom C2"
POPUP "&Format S2"
POPUP "&Options C3
POPUP "&Window C3"
POPUP "&Help S3"
END
Jak widać, separatory zostały zastąpione różnymi grupami menu każdej aplikacji.
Tabele akceleratora skojarzone z menu w miejscu powinny być również dostarczane przez aplikację serwera. Kontener uwzględni je we własnych tabelach akceleratora.
Po aktywowaniu osadzonego elementu platforma ładuje menu w miejscu. Następnie prosi aplikację serwera o jego menu dotyczące aktywacji w miejscu i wstawia je tam, gdzie znajdują się separatory. W ten sposób menu łączą się. Menu są uzyskiwane z kontenera do obsługi pliku i umieszczania okna, a menu są uzyskiwane z serwera do działania w elemencie.
Aplikacje serwera powinny utworzyć nowy pasek narzędzi i przechowywać mapę bitową w osobnym pliku. Aplikacje wygenerowane przez kreatora przechowują tę mapę bitową w pliku o nazwie ITOOLBAR.BMP. Nowy pasek narzędzi zastępuje pasek narzędzi aplikacji kontenera, gdy element serwera jest aktywowany i powinien zawierać te same elementy co normalny pasek narzędzi, ale usuwa ikony reprezentujące elementy w menu Plik i okno.
Ten pasek narzędzi jest ładowany do COleIPFrameWnd
klasy pochodnej utworzonej przez kreatora aplikacji. Pasek stanu jest obsługiwany przez aplikację kontenera. Aby uzyskać więcej informacji na temat implementacji okien ramowych w miejscu, zobacz Serwery: implementowanie serwera.