Aggiunta di funzionalitą al controllo composito

Una volta che hai inserito tutti i controlli necessari nel controllo composito, il passo successivo prevede l'aggiunta di nuove funzionalitą. Questa nuova funzionalitą di solito cade in due categorie:

Per lo scopo e campo di applicazione del presente articolo, la parte restante di questa sezione si concentra esclusivamente sulla gestione degli eventi.

Dichiarazione di IDispEventImpl interfacce per i controlli contenuti

Per ogni controllo contenuto, che si desidera gestire gli eventi, č necessario implementare un'interfaccia dispatch evento derivandolo dalla IDispEventImpl classe template. Questa derivazione č fatto nella dichiarazione del controllo composito e consiste di due parametri

La seguente riga di codice di esempio, trovata nella dichiarazione della classe base, dichiara un'interfaccia IDispEventImpl per un controllo ( IDC_CIRCCTRL1 ), per la classe di un controllo composito ( CMyCompositeCtrl ).

pubblica IDispEventImpllt; IDC_CIRCCTL1, CMyCompositeCtrl & gt;

Dichiarazione di mappa del Sink di evento

Dopo aver dichiarato la spedizione classi di eventi per ogni controllo del contenuto, č necessario aggiungere una mappa del sink di evento all'oggetto controllo composito. Questa mappa compie due cose:

La mappa del sink di evento viene implementata utilizzando diverse macro predefinite:

BEGIN_SINK_MAP(CtrlName)

Dichiara l'inizio della mappa del sink di evento per il controllo composito CtrlName.

SINK_ENTRY(CtrlID, DispIID, dispID, EventHandler)

Dichiara la funzione del gestore per l'evento specificato (dispID), (EventHandler) dell'interfaccia dispatch DispIID, per il controllo identificato dal CtrlID.

END_SINK_MAP()

Dichiara la fine della mappa del sink di evento per il controllo composito CtrlName.

Nell'esempio di codice (situato nella.File CPP del controllo composito) dichiara una mappa del sink di evento per la CMyCompositeCtrl oggetto. Dichiara due gestori di eventi per due controlli contenuti ( IDC_CIRCCTL1 e IDC_CIRCCTL2 ). L'evento Click per entrambi i controlli č affidata la OnClick_CircCtrl1 e OnClick_CircCtrl2 funzioni.

BEGI&N_SINK_MAP(CMyCompositeCtrl)
 nbsp; SINK_ENTRY (IDC_CIRCCTL1, DISPID_CLICK, OnClick_CircCtrl1)
   SINK_ENTRY (IDC_CIRCCTL2, DISPID_CLICK, OnClick_CircCtrl2)
END_SINK_MAP()

Una volta che si č dichiarate la mappa del sink di evento, procedere per implementare i gestori eventi per il controllo composito.

Dichiarazione e l'implementazione di gestori di eventi

La dichiarazione del passo mappa del Sink di eventi, č stato aggiunto una nuova mappa che dichiarato due gestori di eventi per i due controlli contenuti Circ. Ora č il momento di attuare questi gestori. Il formato č la seguente:

retVal stdcall Eve&ntHandler (args)
{
 nbsp; //handle evento sparando in modo appropriato
}

dove retVal č il valore restituito del gestore eventi, EventHandler č il nome del gestore di funzione, e args č un elenco facoltativo di argomenti per l'evento. Questo nome deve corrispondere a uno degli eventi gestori dichiarati nella mappa del sink di evento del controllo composito.

Nell'esempio di codice seguente viene definito un gestore eventi (l'evento Click) per il controllo contenuto identificato daIDC_CIRCCTRL1:

void   stdcall (O&nClick_CircCtrl1)
{
 nbsp; MessageBox ("evento Click sparato!", "CircCtl1", MB_OK);
}

Aggiungere gestori eventi per le restanti voci nel caso in cui affondano mappa del controllo composito.

Avvio e chiude il contatto con controlli contenuti

Prima che il controllo composito diventi pienamente attivo, ogni controllo contenuto, cui eventi si gestisce, viene eseguita una query per le interfacce in uscita, come ad esempio un'interfaccia dispatch di eventi. Se vengono trovate tutte le interfacce, le connessioni sono stabilite e un riferimento all'interfaccia in uscita viene utilizzato per gestire gli eventi dal controllo. Questa procedura č indicata come "consigliando il controllo" e avviene automaticamente mediante l'oggetto controllo composito utilizzando la mappa del sink di evento, dopo l'inizializzazione del controllo composito.

Dopo che l'utente ha respinto la finestra di dialogo, tutti memorizzati i riferimenti alle interfacce in uscita dai controlli contenuti vengono eliminati. Questo č indicato come "annullare il controllo" ed č anche fatto automaticamente dal controllo composito.

Index