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ą:

Układy menu

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:

  1. 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).

  2. Dwa kolejne separatory.

  3. 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:

  1. Edytuj menu identyczne z tym, które jest używane podczas otwierania plików.

  2. Separator.

  3. Menu edycji obiektów, takie jak menu Pióro w przykładowej aplikacji Scribble.

  4. Separator.

  5. 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.

Paski narzędzi i paski stanu

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 COleIPFrameWndklasy 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.

Zobacz też

Menu i zasoby (OLE)
Aktywacja
Serwery
Kontenery