Contenitori di controlli ActiveX: gestione di eventi da un controllo ActiveX
Questo articolo illustra l'uso della finestra Proprietà (in Visualizzazione classi) per installare i gestori eventi per i controlli ActiveX in un contenitore di controlli ActiveX. I gestori eventi vengono usati per ricevere notifiche (dal controllo) di determinati eventi ed eseguire alcune azioni in risposta. Questa notifica viene chiamata "generazione" dell'evento.
Importante
ActiveX è una tecnologia legacy che non deve essere usata per il nuovo sviluppo. Per altre informazioni sulle tecnologie moderne che sostituisce ActiveX, vedere Controlli ActiveX.
Nota
Questo articolo usa un progetto contenitore di controlli ActiveX basato su dialoghi denominato Container e un controllo incorporato denominato Circ come esempi nelle procedure e nel codice.
Usando il pulsante Eventi nella finestra Proprietà (in Visualizzazione classi), è possibile creare una mappa di eventi che possono verificarsi nell'applicazione contenitore di controlli ActiveX. Questa mappa, denominata "mappa sink eventi", viene creata e gestita da Visual C++ quando si aggiungono gestori eventi alla classe contenitore di controlli. Ogni gestore eventi, implementato con una voce della mappa eventi, esegue il mapping di un evento specifico a una funzione membro del gestore eventi del contenitore. Questa funzione del gestore eventi viene chiamata quando l'evento specificato viene generato dall'oggetto controllo ActiveX.
Per altre informazioni sulle mappe sink di eventi, vedere Sink di eventi Mappe nella guida di riferimento alla libreria di classi.
Modifiche del gestore eventi al progetto
Quando si usa la finestra Proprietà per aggiungere gestori eventi, una mappa sink eventi viene dichiarata e definita nel progetto. Le istruzioni seguenti vengono aggiunte al controllo . File CPP la prima volta che viene aggiunto un gestore eventi. Questo codice dichiara una mappa del sink di eventi per la classe della finestra di dialogo (in questo caso , CContainerDlg
):
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
END_EVENTSINK_MAP()
Quando si usa la finestra Proprietà per aggiungere eventi, viene aggiunta una voce della mappa eventi (ON_EVENT
) alla mappa sink eventi e viene aggiunta una funzione del gestore eventi all'implementazione del contenitore (. File CPP).
Nell'esempio seguente viene dichiarato un gestore eventi denominato OnClickInCircCtrl
, per l'evento del ClickIn
controllo Circ:
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
VTS_I4 VTS_I4)
END_EVENTSINK_MAP()
Inoltre, il modello seguente viene aggiunto all'implementazione della CContainerDlg
classe (. File CPP) per la funzione membro del gestore eventi:
BOOL CContainerDlg::OnClickInCircctrl1(OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY)
{
// use nX and nY here
TRACE(_T("nX = %d, nY = %d\n"), nX, nY);
return TRUE;
}
Per altre informazioni sulle macro del sink di eventi, vedere Sink di eventi Mappe nella guida di riferimento alla libreria di classi.
Per creare una funzione del gestore eventi
In Visualizzazione classi selezionare la classe della finestra di dialogo che contiene il controllo ActiveX. Per questo esempio, usare
CContainerDlg
.Nella finestra Proprietà fare clic sul pulsante Eventi .
Nella finestra Proprietà selezionare l'ID controllo del controllo ActiveX incorporato. Per questo esempio, usare
IDC_CIRCCTRL1
.Nella finestra Proprietà viene visualizzato un elenco di eventi che possono essere attivati dal controllo ActiveX incorporato. A qualsiasi funzione membro visualizzata in grassetto sono già assegnate funzioni del gestore.
Selezionare l'evento che si vuole gestire dalla classe della finestra di dialogo. Per questo esempio, selezionare Fare clic.
Nella casella di riepilogo a discesa a destra selezionare <Aggiungi> ClickCircctrl1.
Fare doppio clic sulla nuova funzione del gestore da Visualizzazione classi per passare al codice del gestore eventi nell'implementazione (. File CPP) di
CContainerDlg
.