Controlli ActiveX MFC: aggiunta di proprietà personalizzate

Le proprietà personalizzate differiscono dalle proprietà predefinite in quanto le proprietà personalizzate non sono già implementate dalla COleControl classe . Una proprietà personalizzata viene utilizzata per esporre un determinato stato o un aspetto di un controllo ActiveX a un programmatore che utilizza il controllo .

Questo articolo descrive come aggiungere una proprietà personalizzata al controllo ActiveX usando l'Aggiunta guidata proprietà e illustra le modifiche del codice risultanti. Gli argomenti includono:

Le proprietà personalizzate sono disponibili in quattro varietà di implementazione: variabile membro, variabile membro con notifica, metodi Get/Set e parametrizzati.

  • Implementazione della variabile membro

    Questa implementazione rappresenta lo stato della proprietà come variabile membro nella classe del controllo. Usare l'implementazione della variabile membro quando non è importante sapere quando cambia il valore della proprietà. Tra i tre tipi, questa implementazione crea la quantità minima di codice di supporto per la proprietà . La macro di immissione della mappa dispatch per l'implementazione della variabile membro è DISP_PROPERTY.

  • Variabile membro con implementazione delle notifiche

    Questa implementazione è costituita da una variabile membro e da una funzione di notifica creata dall'Aggiunta guidata proprietà. La funzione di notifica viene chiamata automaticamente dal framework dopo la modifica del valore della proprietà. Usare la variabile membro con l'implementazione di notifica quando è necessario ricevere una notifica dopo la modifica di un valore della proprietà. Questa implementazione richiede più tempo perché richiede una chiamata di funzione. La macro di immissione della mappa dispatch per questa implementazione è DISP_PROPERTY_NOTIFY.

  • Implementazione dei metodi Get/Set

    Questa implementazione è costituita da una coppia di funzioni membro nella classe del controllo. L'implementazione dei metodi Get/Set chiama automaticamente la funzione membro Get quando l'utente del controllo richiede il valore corrente della proprietà e la funzione membro Set quando l'utente del controllo richiede che la proprietà venga modificata. Usare questa implementazione quando è necessario calcolare il valore di una proprietà durante l'esecuzione, convalidare un valore passato dall'utente del controllo prima di modificare la proprietà effettiva o implementare un tipo di proprietà di sola lettura o scrittura. La macro di immissione della mappa dispatch per questa implementazione è DISP_PROPERTY_EX. Nella sezione seguente, utilizzando l'Aggiunta guidata proprietà per aggiungere una proprietà personalizzata, viene utilizzata la proprietà personalizzata CircleOffset per illustrare questa implementazione.

  • Implementazione con parametri

    L'implementazione con parametri è supportata dall'Aggiunta guidata proprietà. È possibile usare una proprietà con parametri (talvolta detta matrice di proprietà) per accedere a un set di valori tramite una singola proprietà del controllo. La macro di immissione della mappa dispatch per questa implementazione è DISP_PROPERTY_PARAM. Per altre informazioni sull'implementazione di questo tipo, vedere Implementazione di una proprietà con parametri nell'articolo Controlli ActiveX: Argomenti avanzati.

Utilizzo della Procedura guidata Aggiungi proprietà per aggiungere una proprietà personalizzata

La procedura seguente illustra l'aggiunta di una proprietà personalizzata CircleOffset, che usa l'implementazione dei metodi Get/Set. La proprietà personalizzata CircleOffset consente all'utente del controllo di sfalsare il cerchio dal centro del rettangolo di delimitazione del controllo. La procedura per l'aggiunta di proprietà personalizzate con un'implementazione diversa da Get/Set Methods è molto simile.

Questa stessa procedura può essere usata anche per aggiungere altre proprietà personalizzate desiderate. Sostituire il nome della proprietà personalizzata per il nome e i parametri della proprietà CircleOffset.

Per aggiungere la proprietà personalizzata CircleOffset tramite l'Aggiunta guidata proprietà

  1. Caricare il progetto del controllo.

  2. In Visualizzazione classi, espandere il nodo di libreria del controllo.

  3. Fare clic con il pulsante destro del mouse sul nodo interfaccia del controllo (il secondo nodo del nodo di libreria) per aprire il menu di scelta rapida.

  4. Scegliere Aggiungi dal menu di scelta rapida e quindi fare clic su Aggiungi proprietà.

    Verrà visualizzata l'Aggiunta guidata proprietà.

  5. Nella casella Nome proprietà digitare CircleOffset.

  6. Per Tipo di implementazione, fare clic su Metodi Get/Set.

  7. Nella casella Tipo di proprietà selezionare short.

  8. Digitare nomi univoci per le funzioni Get e Set oppure accettare i nomi predefiniti.

  9. Fare clic su Fine.

Aggiunta guidata proprietà modifiche per proprietà personalizzate

Quando si aggiunge la proprietà personalizzata CircleOffset, l'Aggiunta guidata proprietà apporta modifiche all'intestazione (. H) e l'implementazione (. File CPP) della classe del controllo.

Le righe seguenti vengono aggiunte a . File H per dichiarare due funzioni denominate GetCircleOffset e SetCircleOffset:

SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);

La riga seguente viene aggiunta all'oggetto del controllo . File IDL:

[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;

Questa riga assegna alla proprietà CircleOffset un numero ID specifico, ricavato dalla posizione del metodo nei metodi e nell'elenco delle proprietà dell'Aggiunta guidata proprietà.

Inoltre, la riga seguente viene aggiunta alla mappa di distribuzione (in . File CPP della classe di controllo) per eseguire il mapping della proprietà CircleOffset alle due funzioni del gestore del controllo:

DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)

Infine, le implementazioni delle GetCircleOffset funzioni e SetCircleOffset vengono aggiunte alla fine del controllo . File CPP. Nella maggior parte dei casi, si modificherà la funzione Get per restituire il valore della proprietà . La funzione Set conterrà in genere codice che deve essere eseguito prima o dopo la modifica della proprietà.

void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

Si noti che l'Aggiunta guidata proprietà aggiunge automaticamente una chiamata, a SetModifiedFlag, al corpo della funzione Set. La chiamata a questa funzione contrassegna il controllo come modificato. Se un controllo è stato modificato, il nuovo stato verrà salvato al salvataggio del contenitore. Questa funzione deve essere chiamata ogni volta che una proprietà, salvata come parte dello stato permanente del controllo, cambia valore.

Vedi anche

Controlli ActiveX MFC
Controlli ActiveX MFC: proprietà
Controlli ActiveX MFC: metodi
Classe COleControl