Contenitori: funzionalità avanzate
In questo articolo vengono descritti i passaggi necessari per incorporare funzionalità avanzate facoltative nelle applicazioni contenitore esistenti. Queste funzionalità sono:
Creazione di un'applicazione contenitore/server
Un'applicazione contenitore/server è un'applicazione che funge sia da contenitore che da server. Microsoft Word per Windows ne è un esempio. È possibile incorporare i documenti di Word per Windows in altre applicazioni ed è inoltre possibile importare elementi nei documenti di Word per Windows. La procedura che consente di trasformare un'applicazione sia in un contenitore che in un server completo (non è possibile creare un'applicazione contenitore/server ridotto) è analoga a quella per la creazione di un server completo.
L'articolo Server: Implementazione di un server elenca una serie di attività necessarie per implementare un'applicazione server. Per convertire un'applicazione contenitore in un'applicazione contenitore/server, è necessario eseguire alcune di quelle attività, con l'aggiunta di codice al contenitore. Di seguito vengono elencati i principali aspetti da considerare:
Il codice del contenitore creato dalla creazione guidata applicazioni inizializza il sottosistema OLE. Non sarà necessario modificare o aggiungere nulla per tale supporto.
Laddove la classe base di una classe di documento è
COleDocument
, modificare la classe base inCOleServerDoc
.Eseguire l'override
COleClientItem::CanActivate
per evitare di modificare gli elementi sul posto quando il server stesso è utilizzato per la modifica sul posto.Ad esempio, l'esempio OLE MFC OCLIENT ha incorporato un elemento creato dall'applicazione contenitore/server. Aprire l'applicazione OCLIENT e modificare sul posto l'elemento creato dall'applicazione contenitore/server. Durante la modifica dell'elemento dell'applicazione, si decide di incorporare un elemento creato dall'esempio OLE MFC HIERSVR. A tale scopo, non utilizzare l'attivazione sul posto. È necessario aprire completamente HIERSVR per attivare questo elemento. Poiché la libreria MFC non supporta questa funzionalità OLE, l'override di
COleClientItem::CanActivate
consente di verificare questa situazione ed evitare un possibile errore di runtime nell'applicazione.
Se si crea una nuova applicazione e si desidera che funga da applicazione contenitore/server, selezionare tale opzione nella finestra di dialogo Opzioni OLE nella creazione guidata applicazione e tale supporto verrà creato automaticamente. Per altre informazioni, vedere l'articolo Panoramica: Creazione di un contenitore di controlli ActiveX. Per informazioni sugli esempi MFC, vedere Esempi MFC.
Notare che non è possibile inserire un'applicazione MDI in se stessa. Un'applicazione contenitore/server non può essere inserita in se stessa a meno che non sia un'applicazione SDI.
Collegamenti a oggetti incorporati
I collegamenti alla funzionalità Oggetti incorporati consentono all'utente di creare un documento con un collegamento OLE a un oggetto incorporato all'interno dell'applicazione contenitore. Ad esempio, è possibile creare un documento in un elaboratore di testo contenente un foglio di calcolo incorporato. Se l'applicazione supporta i collegamenti a oggetti incorporati, è possibile incollare un collegamento al foglio di calcolo contenuto nel documento dell'elaboratore di testo. Questa funzionalità consente all'applicazione di utilizzare le informazioni contenute nel foglio di lavoro senza sapere da dove provenga originariamente.
Per eseguire il collegamento a oggetti incorporati nell'applicazione
Derivare la classe del documento da
COleLinkingDoc
anziché daCOleDocument
.Creare un ID classe OLE (CLSID) per l'applicazione usando il generatore di ID classe incluso negli strumenti di sviluppo OLE.
Registrare l'applicazione con OLE.
Creare un oggetto
COleTemplateServer
come membro della classe dell'applicazione.Nella funzione membro
InitInstance
della classe dell'applicazione, effettuare le operazioni seguenti:Connettere l'oggetto
COleTemplateServer
ai modelli di documento chiamando la funzione membroConnectTemplate
dell'oggetto.Chiamare la
COleTemplateServer::RegisterAll
funzione membro per registrare tutti gli oggetti classe con il sistema OLE.Chiamare
COleTemplateServer::UpdateRegistry
. L'unico parametro da OAT_CONTAINERUpdateRegistry
se l'applicazione non viene avviata con l'opzione "/Embedded". In questo modo l'applicazione viene registrata come contenitore in grado di supportare collegamenti a oggetti incorporati.Se l'applicazione viene avviata con l'opzione "/Embedded", non dovrebbe visualizzare la finestra principale, simile a un'applicazione server.
L'esempio OLE MFC OCLIENT implementa questa funzionalità. Per un esempio di come viene eseguita questa operazione, vedere la InitInstance
funzione in OCLIENT. File CPP di questa applicazione di esempio.