Controlli ActiveX MFC: Utilizzo di immagini in un controllo ActiveX

In questo articolo viene descritto il tipo più comune dell'immagine e come distribuirlo nel controllo ActiveX.Gli argomenti trattati includono

  • Cenni preliminari sulle proprietà personalizzate dell'immagine

  • Implementare una proprietà personalizzata dell'immagine nel controllo ActiveX

  • Aggiunte al progetto di controllo

Cenni preliminari sulle proprietà personalizzate dell'immagine

Un tipo di immagine è incluso in un gruppo di tipi comuni per alcuni controlli ActiveX.Il tipo dell'immagine gestisce un metafile, bitmap, o le icone e che consente di specificare un'immagine da visualizzare in un controllo ActiveX.Le proprietà personalizzate dell'immagine vengono implementate mediante un oggetto immagine e ottenere/impostare le funzioni che consentono l'accesso utente alla proprietà.Gli utenti del controllo accede alla proprietà personalizzata dell'immagine utilizzando la pagina delle proprietà predefinita dell'immagine.

Oltre al tipo standard dell'immagine, i tipi di carattere e ai sono inoltre disponibili.Per ulteriori informazioni sull'utilizzo del tipo di carattere standard del controllo ActiveX, vedere l'articolo Controlli ActiveX MFC: Utilizzo dei tipi di carattere.

Le classi di controlli ActiveX forniscono a diversi componenti che è possibile utilizzare per implementare la proprietà dell'immagine all'interno del controllo.Questi componenti includono:

  • La classe di CPictureHolder .

    Questa classe fornisce l'accesso all'oggetto immagine e alla funzionalità dell'elemento visualizzato dalla proprietà personalizzata dell'immagine.

  • Il supporto per le proprietà di tipo LPPICTUREDISP, distribuite con ottiene o imposta le funzioni.

    Mediante Visualizzazione classi è possibile aggiungere rapidamente una proprietà personalizzata, o proprietà, che supporta il tipo dell'immagine.Per ulteriori informazioni sulle proprietà del controllo ActiveX aggiunta mediante Visualizzazione classi, vedere l'articolo Controlli ActiveX MFC: proprietà.

  • Una pagina delle proprietà che modifica la proprietà o le proprietà dell'immagine di un controllo.

    Questa pagina delle proprietà fa parte di un gruppo di pagine delle proprietà predefinite disponibili per i controlli ActiveX.Per ulteriori informazioni sulle pagine delle proprietà del controllo ActiveX, vedere l'articolo Controlli ActiveX MFC: Utilizzando le pagine delle proprietà predefinite

Implementare una proprietà personalizzata dell'immagine nel controllo ActiveX

Dopo avere completato i passaggi descrivere in questa sezione, il controllo può visualizzare immagini scelte dall'utente.L'utente può modificare l'immagine visualizzata utilizzando una pagina delle proprietà che mostra l'immagine corrente e contiene un pulsante sfoglia un'che consente alle diverse immagini selezionate.

Una proprietà personalizzata dell'immagine viene distribuita mediante un processo simile a quello utilizzato per implementare altre proprietà, la differenza principale è che la proprietà personalizzata deve supportare un tipo dell'immagine.Poiché l'elemento della proprietà dell'immagine deve essere disegnato dal controllo ActiveX, un numero di aggiunte e modifiche devono essere apportate alla proprietà prima che possa essere completamente implementata.

Per implementare una proprietà personalizzata dell'immagine, è necessario effettuare quanto segue:

  • Aggiungere codice al progetto di controllo.

    Una pagina delle proprietà standard ID dell'immagine, un membro dati di tipo CPictureHoldere una proprietà personalizzata di tipo LPPICTUREDISP con un'implementazione get/set devono essere aggiunti.

  • Modificare diverse funzioni nella classe del controllo.

    Queste modifiche verranno apportate a diverse funzioni responsabili di disegno del controllo ActiveX.

Aggiunte al progetto di controllo

Per aggiungere la pagina delle proprietà ID per la pagina delle proprietà standard dell'immagine, inserire la seguente riga dopo la macro di BEGIN_PROPPAGEIDS nel file di implementazione del controllo (.CPP):

PROPPAGEID(CLSID_CPicturePropPage)

È inoltre necessario incrementare il parametro count della macro di BEGIN_PROPPAGEIDS da una.La riga seguente viene illustrata questa:

BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)

Per aggiungere il membro dati di CPictureHolder alla classe del controllo, inserire la seguente riga nella sezione protetta della dichiarazione della classe del controllo nel file di intestazione del controllo (. h):

CPictureHolder    m_pic;

Non è necessario denominare il membro dati m_pic; qualsiasi nome sufficiente.

Successivamente, aggiungere una proprietà personalizzata che supporta un tipo dell'immagine:

Per aggiungere una proprietà personalizzata dell'immagine utilizzando l'aggiunta guidata proprietà

  1. Caricare il progetto del controllo.

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

  3. 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.

  4. Dal menu di scelta rapida, scegliere Aggiungi quindi Aggiungi proprietà.

  5. Nella casella di Property Name , digitare il nome della proprietà.Ad esempio gli scopi, ControlPicture viene utilizzato in questa procedura.

  6. Nella casella di Property Type , IPictureDisp* selezionato per il tipo di proprietà.

  7. Per Implementation Type, fare clic Get/Set Methods.

  8. I nomi univoci del tipo per il ottenere e impostare le funzioni o accettano i nomi predefiniti.In questo esempio, i nomi predefiniti GetControlPicture e in SetControlPicture viene utilizzato.)

  9. Fare clic su Fine.

Aggiunta guidata proprietà aggiungere il codice seguente tra le osservazioni della mappa di invio nell'intestazione del controllo (. h) file:

IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);

Inoltre, il codice seguente è stato immesso nella mappa di invio del file di implementazione del controllo (.CPP):

DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture, 
   GetControlPicture, SetControlPicture, VT_PICTURE)

Aggiunta guidata proprietà vengono aggiunti le due funzioni stub nel file di implementazione del controllo:

IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your dispatch handler code here

   return NULL;
}

void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

[!NOTA]

I nomi di funzione e la classe del controllo potrebbero differire dall'esempio precedente.

1exs6wht.collapse_all(it-it,VS.110).gifModifiche al progetto di controllo

Dopo avere apportato le modifiche necessarie al progetto di controllo, è necessario modificare diverse funzioni che influiscono sul rendering del controllo ActiveX.Queste funzioni, OnResetState, OnDrawe le funzioni get/set di una proprietà personalizzata dell'immagine, si trovano nel file di implementazione del controllo.Si noti che in questo esempio la classe del controllo viene chiamata CSampleCtrl, il membro dati di CPictureHolder viene chiamata m_pice il nome della proprietà personalizzato dell'immagine viene ControlPicture).

Nella funzione di OnResetState il controllo, aggiungere la seguente riga facoltativa dopo la chiamata a COleControl::OnResetState:

m_pic.CreateEmpty();

Questo imposta l'immagine del controllo a un'immagine vuota.

Per disegnare l'immagine correttamente, effettuare una chiamata a CPictureHolder::Render nella funzione di OnDraw del controllo.Modificare la funzione per essere simile al seguente:

void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
    if (!pdc)
        return;

   m_pic.Render(pdc, rcBounds, rcBounds);
}

Nel metodo Get della proprietà personalizzata del controllo, aggiungere la riga seguente:

return m_pic.GetPictureDispatch();

Nella funzione set di proprietà personalizzato di un'immagine del controllo, aggiungere le righe seguenti:

m_pic.SetPictureDispatch(pVal);
InvalidateControl();

La proprietà dell'immagine deve essere reso persistente in modo che le informazioni aggiunte in fase di progettazione rivelino in fase di esecuzione.Aggiungere la riga seguente a COleControl- funzione derivata di DoPropExchange della classe:

PX_Picture(pPX, _T("ControlPicture"), m_pic);

[!NOTA]

I nomi di funzione e la classe potrebbero differire dall'esempio precedente.

Una volta completate le modifiche, ricompilare il progetto includere la nuova funzionalità della proprietà personalizzata immagine e utilizzare Test Container per testare la nuova proprietà.Per ulteriori informazioni sulla modalità di accesso a Test Container, vedere Verifica di proprietà ed eventi tramite Test Container.

Vedere anche

Concetti

Controlli ActiveX MFC

Controlli ActiveX MFC: Utilizzo dei tipi di carattere

Controlli ActiveX MFC: Pagine delle proprietà