Condividi tramite


Controlli ActiveX MFC

Un controllo ActiveX è un componente software riutilizzabile basato sul Component Object Model (COM) che supporta un'ampia gamma di funzionalità OLE e può essere personalizzato in base a molte esigenze software.

Importante

ActiveX è una tecnologia legacy che non deve essere usata per il nuovo sviluppo. Per altre informazioni, vedere Controlli ActiveX.

I controlli ActiveX sono progettati per l'uso sia nei normali contenitori di controlli ActiveX che in Internet, nelle pagine World Wide Web. È possibile creare controlli ActiveX con MFC, descritti qui o con Active Template Library (ATL).

Un controllo ActiveX può disegnare se stesso nella propria finestra, rispondere agli eventi (ad esempio i clic del mouse) e essere gestito tramite un'interfaccia che include proprietà e metodi simili a quelli negli oggetti di Automazione.

Questi controlli possono essere sviluppati per molti usi, ad esempio l'accesso al database, il monitoraggio dei dati o l'grafo. Oltre alla portabilità, i controlli ActiveX supportano funzionalità non disponibili in precedenza per i controlli ActiveX, ad esempio la compatibilità con i contenitori OLE esistenti e la possibilità di integrare i menu con i menu dei contenitori OLE. Inoltre, un controllo ActiveX supporta completamente l'automazione, che consente al controllo di esporre proprietà di lettura/scrittura e un set di metodi che possono essere chiamati dall'utente del controllo.

È possibile creare controlli ActiveX senza finestra e controlli che creano una finestra solo quando diventano attivi. I controlli senza finestra velocizzano la visualizzazione dell'applicazione e consentono di avere controlli trasparenti e nontangulari. È anche possibile caricare le proprietà del controllo ActiveX in modo asincrono.

Un controllo ActiveX viene implementato come server in-process (in genere un oggetto di piccole dimensioni) che può essere usato in qualsiasi contenitore OLE. Si noti che la funzionalità completa di un controllo ActiveX è disponibile solo quando viene usata all'interno di un contenitore OLE progettato per essere a conoscenza dei controlli ActiveX. Vedere Convertire controlli ActiveX in altre applicazioni per un elenco di contenitori che supportano i controlli ActiveX. Questo tipo di contenitore, denominato "contenitore di controlli", può operare un controllo ActiveX usando le proprietà e i metodi del controllo e riceve notifiche dal controllo ActiveX sotto forma di eventi. La figura seguente illustra questa interazione.

Interazione tra il contenitore di controllo ActiveX e il controllo.
Interazione tra un contenitore di controlli ActiveX e un controllo ActiveX con finestra

Per alcune informazioni recenti sull'ottimizzazione dei controlli ActiveX, vedere Controlli ActiveX MFC: Ottimizzazione.

Per creare un controllo ActiveX MFC, vedere Creare un progetto di controllo ActiveX.

Per altre informazioni, vedere:

Componenti di base di un controllo ActiveX

Un controllo ActiveX usa diversi elementi programmatici per interagire in modo efficiente con un contenitore di controlli e con l'utente. Si tratta della classe COleControl, di un set di funzioni di generazione di eventi e di una mappa di invio.

Ogni oggetto di controllo ActiveX sviluppato eredita un set avanzato di funzionalità dalla relativa classe di base MFC, COleControl. Queste funzionalità includono l'attivazione sul posto e la logica di automazione. COleControl può fornire all'oggetto controllo la stessa funzionalità di un oggetto finestra MFC, oltre alla possibilità di generare eventi. COleControl può anche fornire controlli senza finestra, che si basano sul proprio contenitore per assistenza con alcune delle funzionalità fornite da una finestra (acquisizione del mouse, stato attivo della tastiera, scorrimento), ma offrono una visualizzazione molto più veloce.

Poiché la classe di controllo deriva da COleControl, eredita la capacità di inviare o "generare" messaggi, chiamati eventi, al contenitore di controlli quando vengono soddisfatte determinate condizioni. Questi eventi vengono usati per notificare al contenitore di controlli quando si verifica qualcosa di importante nel controllo. È possibile inviare informazioni aggiuntive su un evento al contenitore di controlli associando parametri all'evento. Per altre informazioni sugli eventi di controllo ActiveX, vedere l'articolo Controlli ActiveX MFC: Eventi.

L'elemento finale è una mappa dispatch, usata per esporre un set di funzioni (denominate metodi) e attributi (denominati proprietà) all'utente del controllo. Le proprietà consentono al contenitore di controlli o all'utente del controllo di modificare il controllo in diversi modi. L'utente può modificare l'aspetto del controllo, modificare determinati valori del controllo o effettuare richieste del controllo, ad esempio l'accesso a una parte di dati specifica gestita dal controllo. Questa interfaccia è determinata dallo sviluppatore del controllo e viene definita tramite Visualizzazione classi. Per altre informazioni sui metodi e sulle proprietà dei controlli ActiveX, vedere gli articoli Controlli ActiveX MFC: Metodi e proprietà.

Interazione tra i controlli con i contenitori di controlli Windows e ActiveX

Quando un controllo viene usato all'interno di un contenitore di controlli, usa due meccanismi per comunicare: espone proprietà e metodi e genera eventi. La figura seguente illustra come vengono implementati questi due meccanismi.

Il controllo ActiveX comunica con il relativo contenitore.
Comunicazione tra un contenitore di controlli ActiveX e un controllo ActiveX

Nella figura precedente viene illustrato anche il modo in cui altre interfacce OLE (oltre a automazione ed eventi) vengono gestite dai controlli.

Tutte le comunicazioni di un controllo con il contenitore vengono eseguite da COleControl. Per gestire alcune richieste del contenitore, COleControl chiamerà le funzioni membro implementate nella classe di controllo. Tutti i metodi e alcune proprietà vengono gestiti in questo modo. La classe del controllo può anche avviare la comunicazione con il contenitore chiamando le funzioni membro di COleControl. Gli eventi vengono attivati in questo modo.

Stati attivi e inattivi di un controllo ActiveX

Un controllo ha due stati di base: attivo e inattivo. Tradizionalmente, questi stati erano distinti in base al fatto che il controllo avesse una finestra. Un controllo attivo aveva una finestra; un controllo inattivo non aveva una finestra. Con l'introduzione dell'attivazione senza finestra, questa distinzione non è più universale, ma si applica ancora a molti controlli.

Quando un controllo senza finestra diventa attivo, richiama l'acquisizione del mouse, lo stato attivo della tastiera, lo scorrimento e altri servizi della finestra dal relativo contenitore. È anche possibile fornire l'interazione del mouse ai controlli inattivi, nonché creare controlli che attendono di essere attivati per creare una finestra.

Quando un controllo con una finestra diventa attivo, è in grado di interagire completamente con il contenitore di controlli, l'utente e Windows. La figura seguente illustra i percorsi di comunicazione tra il controllo ActiveX, il contenitore di controlli e il sistema operativo.

Elaborazione msg nel controllo ActiveX con finestra attiva.
Elaborazione di messaggi di Windows in un controllo ActiveX con finestra (quando attivo)

Serializzazione

La possibilità di serializzare i dati, talvolta definiti persistenza, consente al controllo di scrivere il valore delle relative proprietà nell'archiviazione permanente. I controlli possono quindi essere ricreati leggendo lo stato dell'oggetto dalla risorsa di archiviazione.

Si noti che un controllo non è responsabile dell'accesso al supporto di archiviazione. Al contrario, il contenitore del controllo è responsabile della fornitura del controllo con un supporto di archiviazione da usare nei momenti appropriati. Per altre informazioni sulla serializzazione, vedere l'articolo Controlli ActiveX MFC: Serializzazione. Per informazioni sull'ottimizzazione della serializzazione, vedere Ottimizzazione della persistenza e inizializzazione nei controlli ActiveX: Ottimizzazione.

Installazione di classi e strumenti di controllo ActiveX

Quando si installa Visual C++, le classi di controllo ActiveX MFC e le DLL di runtime del controllo ActiveX retail e debug vengono installate automaticamente se i controlli ActiveX sono selezionati in Setup (sono selezionati per impostazione predefinita).

Per impostazione predefinita, le classi e gli strumenti di controllo ActiveX vengono installati nelle sottodirectory seguenti in \Programmi\Microsoft Visual Studio .NET:

  • \Common7\Tools

    Contiene i file del contenitore di test (TstCon32.exe) e i file della Guida correlati.

  • \Vc7\atlmfc\include

    Contiene i file di inclusione necessari per sviluppare controlli ActiveX con MFC

  • \Vc7\atlmfc\src\mfc

    Contiene il codice sorgente per classi di controlli ActiveX specifiche in MFC

  • \Vc7\atlmfc\lib

    Contiene le librerie necessarie per sviluppare controlli ActiveX con MFC

Sono disponibili anche esempi per i controlli ActiveX MFC. Per altre informazioni su questi esempi, vedere Esempi di controlli: MFC-Based controlli ActiveX

Vedere anche

Elementi dell'interfaccia utente