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 in COleServerDoc.

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

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.

  1. Derivare la classe del documento da COleLinkingDoc anziché da COleDocument.

  2. Creare un ID classe OLE (CLSID) per l'applicazione usando il generatore di ID classe incluso negli strumenti di sviluppo OLE.

  3. Registrare l'applicazione con OLE.

  4. Creare un oggetto COleTemplateServer come membro della classe dell'applicazione.

  5. Nella funzione membro InitInstance della classe dell'applicazione, effettuare le operazioni seguenti:

    • Connettere l'oggetto COleTemplateServer ai modelli di documento chiamando la funzione membro ConnectTemplate 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_CONTAINER UpdateRegistry 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.

Vedi anche

Contenitori
Server