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ą naCOleServerDoc
.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.
Łącza do obiektów osadzonych
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.
Aby połączyć się z obiektami osadzonymi w aplikacji
Utwórz klasę
COleLinkingDoc
dokumentów zamiastCOleDocument
klasy .Utwórz identyfikator klasy OLE (CLSID) dla aplikacji przy użyciu generatora identyfikatorów klas dołączonych do narzędzi programowania OLE.
Zarejestruj aplikację przy użyciu interfejsu OLE.
COleTemplateServer
Utwórz obiekt jako element członkowski klasy aplikacji.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ładowejConnectTemplate
obiektu.Wywołaj funkcję składową,
COleTemplateServer::RegisterAll
aby zarejestrować wszystkie obiekty klas w systemie OLE.Wywołaj polecenie
COleTemplateServer::UpdateRegistry
. Jedynym parametrem, któryUpdateRegistry
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.