Controlli ActiveX MFC: aggiunta di metodi personalizzati
I metodi personalizzati sono diversi dai metodi predefiniti in quanto non sono implementati da COleControl. È necessario fornire l'implementazione per ogni metodo che personalizzato aggiunto al controllo.
Un utente del controllo ActiveX può chiamare un metodo personalizzato in qualsiasi momento per eseguire azioni specifiche. La voce della mappa di invio per i metodi personalizzati è espresso in formato DISP_FUNCTION.
Aggiunta di un metodo personalizzato con l'aggiunta guidata metodo
La procedura riportata di seguito viene illustrato come aggiungere un metodo personalizzato PtInCircle al codice di base di un controllo ActiveX. PtInCircle determina se le coordinate passate al controllo sono all'interno del controllo circle. Questa procedura può essere utilizzata per aggiungere altri metodi personalizzati. Sostituire il nome del metodo personalizzato e i relativi parametri per il metodo e i parametri di PtInCircle.
Nota
In questo esempio viene utilizzata la funzione di InCircle dagli eventi dell'articolo.Per ulteriori informazioni su questa funzione, vedere l'articolo Controlli ActiveX MFC: Aggiunta di eventi personalizzati a un controllo ActiveX.
Per aggiungere il metodo personalizzato di PtInCircle mediante l'aggiunta guidata metodo
Caricare il progetto di controllo.
In Visualizzazione classi, espandere il nodo della libreria del controllo.
Fare clic con il pulsante destro del mouse sul nodo dell'interfaccia del controllo (il secondo nodo il nodo della libreria) per aprire il menu di scelta rapida.
Dal menu di scelta rapida, scegliere Aggiungi quindi scegliere Aggiungi metodo.
Verrà avviata l'aggiunta guidata metodo.
Nella casella di Nome metodo, digitare PtInCircle.
Nella casella di Nome interno, digitare il nome della funzione interna del metodo o utilizzare il valore predefinito (in questo caso, PtInCircle).
Nella casella di Tipo restituito, fare clic VARIANT_BOOL per il tipo restituito del metodo.
Utilizzando i controlli di Nome parametro e di Tipo parametro, aggiungere un parametro denominato xCoord (tipo OLE_XPOS_PIXELS).
Utilizzando i controlli di Nome parametro e di Tipo parametro, aggiungere un parametro denominato yCoord (tipo OLE_YPOS_PIXELS).
Scegliere Fine.
Modifiche dell'Aggiunta guidata metodo per i metodi personalizzati
Quando si aggiunge un metodo personalizzato, l'aggiunta guidata metodo esegue alcune modifiche all'intestazione della classe del controllo (. H) e file di implementazione (.CPP). La riga seguente viene aggiunta alla dichiarazione della mappa di invio nell'intestazione della classe del controllo (. H) file:
VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Questo codice dichiara un metodo PtInCirclechiamato gestore di invio. Questa funzione può essere chiamata dall'utente del controllo mediante il nome esterno PtInCircle.
La riga seguente viene aggiunta del file .IDL del controllo:
[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Questa riga assegna al metodo di PtInCircle un numero ID specifici, la posizione del metodo nei metodi di Aggiunta guidata metodo e l'elenco delle proprietà. Poiché l'aggiunta guidata metodo è stata utilizzata per aggiungere il metodo personalizzato, la voce che è stata aggiunta automaticamente al file .IDL del progetto.
Inoltre, la riga seguente, che si trova nel file di implementazione (.CPP) della classe del controllo, viene aggiunto alla mappa di invio del controllo:
DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
La macro di DISP_FUNCTION esegue il mapping del metodo PtInCircle alla funzione di controllo, PtInCircle, dichiara il tipo restituito per essere VARIANT_BOOL e dichiara due parametri di tipo VTS_XPOS_PIXELS e VTS_YPOSPIXELS per passare a PtInCircle.
Infine, l'aggiunta guidata metodo aggiunge la funzione CSampleCtrl::PtInCircle stub alla fine del file di implementazione del controllo (.CPP). Per PtInCircle funzioni come indicato in precedenza, deve essere modificato come segue:
VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPoint point(xCoord, yCoord);
return InCircle(point);
}
Vedere anche
Riferimenti
Icone di Visualizzazione classi e Visualizzatore oggetti