Kontenery: funkcje zaawansowane

W tym artykule opisano kroki niezbędne do uwzględnienia opcjonalnych zaawansowanych funkcji w istniejących aplikacjach kontenerów. Oto następujące funkcje:

Tworzenie kontenera/aplikacji serwera

Aplikacja kontenera/serwera to aplikacja, która działa zarówno jako kontener, jak i serwer. Przykładem jest program Microsoft Word dla systemu Windows. Możesz osadzić dokumenty programu Word dla systemu Windows w innych aplikacjach, a także osadzić elementy w dokumentach programu Word for Windows. Proces modyfikowania aplikacji kontenera jako kontenera i pełnego serwera (nie można utworzyć złożonej aplikacji kontenera/miniserwera) jest podobny do procesu tworzenia pełnego serwera.

Artykuł Serwery: Implementowanie serwera zawiera listę wielu zadań wymaganych do zaimplementowania aplikacji serwera. Jeśli przekonwertujesz aplikację kontenera na aplikację kontenera/serwera, musisz wykonać niektóre z tych samych zadań, dodając kod do kontenera. Poniżej wymieniono ważne kwestie, które należy wziąć pod uwagę:

  • Kod kontenera utworzony przez kreatora aplikacji już inicjuje podsystem OLE. Nie musisz zmieniać ani dodawać żadnych elementów dla tej obsługi.

  • Wszędzie tam, gdzie klasa bazowa klasy dokumentów to COleDocument, zmień klasę bazową na COleServerDoc.

  • Zastąpij COleClientItem::CanActivate , aby uniknąć edytowania elementów w miejscu, gdy sam serwer jest używany do edycji.

    Na przykład przykładowy obiekt OCLIENT MFC OLE zawiera osadzony element utworzony przez aplikację kontenera/serwera. Otwierasz aplikację OCLIENT i edytujesz w miejscu element utworzony przez aplikację kontenera/serwera. Podczas edytowania elementu aplikacji decydujesz, że chcesz osadzić element utworzony przez przykładowy interfejs HIERSVR MFC OLE. W tym celu nie można użyć aktywacji w miejscu. Aby aktywować ten element, musisz w pełni otworzyć aplikację HIERSVR. Ponieważ biblioteka klas programu Microsoft Foundation nie obsługuje tej funkcji OLE, zastąpienie COleClientItem::CanActivate pozwala sprawdzić tę sytuację i zapobiec ewentualnemu błędowi czasu wykonywania w aplikacji.

Jeśli tworzysz nową aplikację i chcesz, aby działała jako aplikacja kontenera/serwera, wybierz tę opcję w oknie dialogowym Opcje OLE w kreatorze aplikacji i ta obsługa zostanie utworzona automatycznie. Aby uzyskać więcej informacji, zobacz artykuł Omówienie: tworzenie kontenera kontrolek ActiveX. Aby uzyskać informacje na temat przykładów MFC, zobacz Przykłady MFC.

Należy pamiętać, że nie można wstawić aplikacji MDI do siebie. Nie można wstawić aplikacji, która jest kontenerem/serwerem, chyba że jest to aplikacja SDI.

Funkcja Łącza do obiektów osadzonych umożliwia użytkownikowi utworzenie dokumentu z linkiem OLE do obiektu osadzonego wewnątrz aplikacji kontenera. Na przykład utwórz dokument w procesorze tekstów zawierającym osadzony arkusz kalkulacyjny. Jeśli aplikacja obsługuje linki do obiektów osadzonych, może wkleić link do arkusza kalkulacyjnego zawartego w dokumencie procesora tekstów. Ta funkcja umożliwia aplikacji korzystanie z informacji zawartych w arkuszu kalkulacyjnym bez znajomości miejsca, w którym pierwotnie dostał go procesor tekstów.

  1. Utwórz klasę COleLinkingDoc dokumentów zamiast COleDocumentklasy .

  2. Utwórz identyfikator klasy OLE (CLSID) dla aplikacji przy użyciu generatora identyfikatorów klas dołączonych do narzędzi programowania OLE.

  3. Zarejestruj aplikację przy użyciu interfejsu OLE.

  4. COleTemplateServer Utwórz obiekt jako element członkowski klasy aplikacji.

  5. W funkcji składowej InitInstance klasy aplikacji wykonaj następujące czynności:

    • COleTemplateServer Połączenie obiekt do szablonów dokumentów przez wywołanie funkcji składowej ConnectTemplate obiektu.

    • Wywołaj funkcję składową, COleTemplateServer::RegisterAll aby zarejestrować wszystkie obiekty klas w systemie OLE.

    • Wywołaj polecenie COleTemplateServer::UpdateRegistry. Jedynym parametrem, który UpdateRegistry ma być OAT_CONTAINER , jeśli aplikacja nie jest uruchamiana z przełącznikiem "/Embedded". Spowoduje to zarejestrowanie aplikacji jako kontenera, który może obsługiwać linki do obiektów osadzonych.

      Jeśli aplikacja jest uruchamiana z przełącznikiem "/Embedded", nie powinna wyświetlać głównego okna, podobnie jak w przypadku aplikacji serwera.

Przykładowy obiekt OCLIENT MFC OLE implementuje tę funkcję. Aby zapoznać się z przykładem tego, jak to zrobić, zobacz InitInstance funkcję w programie OCLIENT. Plik CPP tej przykładowej aplikacji.

Zobacz też

Kontenery
Serwery