Controlli ActiveX MFC: Aggiunta di proprietà personalizzate
Le proprietà personalizzate differiscono dalle proprietà predefinite in quanto le proprietà personalizzate non vengono implementate dalla classe di COleControl .Una proprietà personalizzata viene utilizzata per esporre una condizione o aspetto di un controllo ActiveX a un programmatore mediante il controllo.
In questo articolo viene descritto come aggiungere una proprietà personalizzata al controllo ActiveX utilizzando l'aggiunta guidata proprietà vengono illustrate le modifiche risultanti di codice.Gli argomenti trattati includono
Utilizzo di aggiunta guidata proprietà per aggiungere una proprietà personalizzata
Modifiche di aggiunta guidata proprietà per le proprietà personalizzate
Le proprietà personalizzate sono disponibili in quattro varietà di implementazione: La variabile membro, variabile membro con la notifica, ottiene o imposta i metodi e con parametri.
Implementazione delle variabili membro
Questa implementazione rappresenta lo stato della proprietà come variabile membro nella classe del controllo.Utilizzare l'implementazione delle variabili membro quando non è importante sapere quando le modifiche ai valori della proprietà.I tre tipi, questa implementazione crea la quantità minima di codice di supporto per la proprietà.La macro di voci della mappa di invio per l'implementazione di variabile membro è DISP_PROPERTY.
Variabile membro con l'implementazione di notifica
Questa implementazione è costituito da una variabile membro e una funzione di notifica creati aggiungendo guidata proprietà.La funzione di notifica automaticamente viene chiamata dal framework dopo il valore della proprietà.Utilizzare la variabile membro con l'implementazione di notifica quando è necessario essere notificati dopo che un valore di proprietà è stato modificato.Questa implementazione richiede più tempo perché richiede una chiamata di funzione.La macro di voci della mappa di invio per questa implementazione è DISP_PROPERTY_NOTIFY.
Ottenere o impostare l'implementazione di metodi
Questa implementazione è costituito da una coppia delle funzioni membro nella classe del controllo.L'implementazione di metodi get/set chiama automaticamente la funzione membro di ottenere quando l'utente richiede del controllo il valore corrente della proprietà e il membro del gruppo vengono eseguiti quando l'utente richiede del controllo apportata alla proprietà.Utilizzare questa implementazione quando è necessario calcolare il valore di una proprietà in fase di esecuzione, convalidare un valore passato dall'utente del controllo prima di modificare effettiva proprietà, o implementare un tipo di proprietà lettura o di sola scrittura.La macro di voci della mappa di invio per questa implementazione è DISP_PROPERTY_EX.La sezione seguente, Utilizzo di aggiunta guidata proprietà per aggiungere una proprietà personalizzata, utilizzare la proprietà personalizzata di CircleOffset per illustrare questa implementazione.
Implementazione con parametri
L'implementazione con parametri è supportata di aggiungere guidata proprietà.Una proprietà con parametri (detto talvolta una matrice di proprietà) può essere utilizzata per accedere a un set di valori in una singola proprietà del controllo.La macro di voci della mappa di invio per questa implementazione è DISP_PROPERTY_PARAM.Per ulteriori informazioni sull'implementazione di questo tipo, vedere implementare una proprietà con parametri nei controlli ActiveX articolo: argomenti avanzati.
Utilizzo di aggiunta guidata proprietà per aggiungere una proprietà personalizzata
La procedura riportata di seguito viene illustrata l'aggiunta di proprietà personalizzata, CircleOffset, che utilizza l'implementazione di metodi get/set.La proprietà personalizzata di CircleOffset consente all'utente del controllo stampi l'offset del controllo circle dal centro del rettangolo di delimitazione del controllo.La procedura per l'aggiunta di proprietà personalizzate con un'implementazione diversa da ottiene o imposta i metodi è molto simile.
Questa procedura può essere utilizzata per aggiungere altre proprietà personalizzate desiderato.Sostituire il nome della proprietà personalizzata per il nome della proprietà e i parametri di CircleOffset.
Per aggiungere una proprietà personalizzata di CircleOffset utilizzo di aggiunta guidata proprietà
Caricare il progetto del controllo.
In Visualizzazione classi, espandere il nodo della libreria del controllo.
Fare clic con il pulsante destro del mouse sul nodo dell'interfaccia per il controllo (il secondo nodo il nodo della libreria) per aprire il menu di scelta rapida.
Dal menu di scelta rapida, fare clic Aggiungi quindi fare clic su Aggiungi proprietà.
Verrà aperta Aggiunta guidata proprietà.
Nella casella di Property Name , tipo CircleOffset.
Per Implementation Type, fare clic Get/Set Methods.
Nella casella di Property Type , shortselezionato.
I nomi univoci del tipo per il ottenere e impostare le funzioni, o accettano i nomi predefiniti.
Fare clic su Fine.
Modifiche di aggiunta guidata proprietà per le proprietà personalizzate
Quando si aggiunge una proprietà personalizzata di CircleOffset, aggiunta guidata proprietà apportare le modifiche all'intestazione (. H) e i file di implementazione (.CPP) della classe del controllo.
Le seguenti righe aggiunte a. Il file H per dichiarare due funzioni ha chiamato GetCircleOffset e SetCircleOffset:
SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);
La riga seguente viene aggiunto al file .IDL del controllo:
[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;
Questa riga viene assegnato alla proprietà di CircleOffset un numero ID specifici, accettato dalla posizione del metodo nei metodi e nell'elenco di proprietà di aggiunta guidata proprietà.
Inoltre, la riga seguente viene aggiunta alla mappa di invio (nel file di .CPP della classe del controllo) per eseguire il mapping della proprietà di CircleOffset alle funzioni di gestione del controllo per due:
DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)
Infine, le implementazioni di GetCircleOffset e le funzioni di SetCircleOffset vengono aggiunti alla fine del file di .CPP del controllo.Nella maggior parte dei casi, verrà modificato il metodo Get per restituire il valore della proprietà.La funzione specificata in genere contiene codice che deve essere eseguito prima o dopo la proprietà cambia.
void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
Si noti che aggiunta guidata proprietà vengono aggiunti automaticamente una chiamata, a SetModifiedFlag, al corpo della funzione specificata.Chiamando questa funzione contrassegna il controllo come modificato.Se un controllo è stato modificato, il nuovo stato verrà salvato quando il contenitore viene salvato.Questa funzione deve essere chiamata ogni volta che una proprietà, salvata come parte dello stato persistente del controllo, valore di.