Contenitori di controlli ActiveX: gestione di eventi da un controllo ActiveX
In questo articolo viene illustrato come utilizzare la Finestra Proprietà per configurare i gestori eventi per i controlli ActiveX in un contenitore di controlli ActiveX. I gestori eventi vengono utilizzati per ricevere le notifiche (dal controllo) di determinati eventi e per eseguire un'azione nella risposta. Questa notifica viene chiamata l'esempio l'attivazione l'evento.
Nota
In questo articolo viene utilizzato un progetto a finestre contenitore di controlli ActiveX denominato Container e un controllo incorporato denominato Circ ad esempio nelle procedure e nel codice.
Utilizzando il pulsante Eventi nella Finestra Proprietà, è possibile creare una mappa di eventi che possono verificarsi nell'applicazione contenitore di controlli ActiveX. Questa mappa, denominata "una mappa del sink di eventi," viene creato e gestito da Visual C++ quando si aggiungono gestori eventi alla classe del 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 è generato dall'oggetto del controllo ActiveX.
Per ulteriori informazioni sulle mappe del sink di eventi, vedere Mappe del sink di eventiin riferimenti alla libreria di classi.
Modifiche del gestore eventi al progetto
Quando si utilizza la Finestra Proprietà per aggiungere gestori eventi, una mappa del sink di eventi è dichiarata e definita nel progetto. Le istruzioni seguenti vengono aggiunte al file del controllo .CPP la prima volta un gestore eventi viene aggiunto. Questo codice dichiara una mappa del sink di eventi della classe della finestra di dialogo (in questo caso, CContainerDlg):
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
...
END_EVENTSINK_MAP()
Quando si utilizza la Finestra Proprietà per aggiungere eventi, una voce della mappa eventi (ON_EVENT) viene aggiunto alla mappa del sink di eventi e una funzione del gestore eventi viene aggiunto al file di implementazione del contenitore (.CPP).
Nell'esempio seguente viene dichiarato un gestore eventi, denominato OnClickInCircCtrl, per l'evento di ClickIn del controllo di Circ:
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
VTS_I4 VTS_I4)
END_EVENTSINK_MAP()
Inoltre, il modello viene aggiunto al file di implementazione della classe di CContainerDlg (.CPP) per la funzione membro 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 ulteriori informazioni sulle macro del sink di evento, vedere Mappe del sink di eventiin riferimenti alla libreria di classi.
Per creare una funzione del gestore eventi
In Visualizzazione classi, selezionare la classe della finestra di dialogo contenente il controllo ActiveX. Per questo esempio, utilizzare CContainerDlg.
Nella finestra Proprietà fare clic sul pulsante Eventi.
Nella Finestra Proprietà, selezionare l'id del controllo ActiveX incorporato. Per questo esempio, utilizzare IDC_CIRCCTRL1.
Nella Finestra Proprietà verrà visualizzato un elenco di eventi che possono essere generati dal controllo ActiveX incorporato. Qualsiasi funzione membro visualizzata in grassetto dispone già di funzioni di gestione assegnate.
Selezionare l'evento desiderato la classe della finestra di dialogo per gestire. Per questo esempio, Clicselezionato.
Nell'elenco a discesa a destra, selezionare <Add> ClickCircctrl1.
Fare doppio clic su nuova funzione di gestione da Visualizzazione classi per passare al codice del gestore eventi nel file di implementazione (.CPP) di CContainerDlg.