Udostępnij przez


Kontenery: funkcje zaawansowane

W tym artykule opisano kroki niezbędne do uwzględnienia opcjonalnych zaawansowanych funkcji w istniejących aplikacjach kontenerów. Są to 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 tego wsparcia.

  • 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 bezpośrednio edytujesz 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 swojej struktury. 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 wiedzy o źródle, z którego procesor tekstu pierwotnie uzyskał te informacje.

  1. Pochodź klasę dokumentu od COleLinkingDoc zamiast od COleDocument.

  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:

    • Połącz swój COleTemplateServer obiekt z szablonami dokumentów, wywołując funkcję składową ConnectTemplate obiektu.

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

    • Zadzwoń do COleTemplateServer::UpdateRegistry. Jedynym parametrem dla UpdateRegistry powinien 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, jak to zrobić, zobacz funkcję InitInstance w pliku OCLIENT.CPP tej przykładowej aplikacji.

Zobacz także

Pojemniki
Serwerów