Controlli ActiveX MFC: utilizzo di immagini in un controllo ActiveX
Questo articolo descrive il tipo di immagine comune e come implementarlo in un controllo ActiveX. Gli argomenti includono:
Panoramica delle proprietà immagine personalizzate
Un tipo immagine fa parte di un gruppo di tipi comuni ad alcuni controlli ActiveX. Il tipo immagine gestisce metafile, bitmap o icone e consente all'utente di specificare un'immagine da visualizzare in un controllo ActiveX. Le proprietà immagine personalizzate vengono implementate con un oggetto immagine e le funzioni Get/Set che consentono all'utente del controllo di accedere alla proprietà immagine. Gli utenti del controllo accedono alla proprietà immagine personalizzata usando la scheda delle proprietà delle immagini predefinita.
Oltre al tipo di immagine standard, sono disponibili anche tipi di carattere e colore. Per altre informazioni sull'uso del tipo carattere nel controllo ActiveX, vedere l'articolo Controlli ActiveX MFC: utilizzo dei tipi di carattere.
Le classi dei controlli ActiveX forniscono numerosi componenti che è possibile usare per implementare la proprietà immagine all'interno del controllo. Questi componenti includono:
La classe CPictureHolder .
Questa classe consente di accedere facilmente all'oggetto immagine e alla funzionalità per l'elemento visualizzato dalla proprietà immagine personalizzata.
Supporto per le proprietà di tipo LPPICTUREDISP, implementate con le funzioni Get/Set.
L'uso della Visualizzazione classi consente di aggiungere rapidamente una o più proprietà personalizzate che supportano il tipo immagine. Per altre informazioni sull'aggiunta di proprietà del controllo ActiveX con Visualizzazione classi, vedere l'articolo Controlli ActiveX MFC: proprietà.
Pagina delle proprietà che gestisce una o più proprietà immagine di un controllo.
Questa pagina proprietà fa parte di un gruppo di pagine delle proprietà predefinite disponibili per i controlli ActiveX. Per altre informazioni sulle pagine proprietà del controllo ActiveX, vedere l'articolo Controlli ActiveX MFC: utilizzo delle pagine delle proprietà predefinite
Implementazione di una proprietà immagine personalizzata nel controllo ActiveX
Dopo avere completato i passaggi descritti in questa sezione, il controllo può visualizzare le immagini scelte dall'utente. L'utente può modificare l'immagine visualizzata usando una pagina delle proprietà che mostra l'immagine corrente ed è dotata di un pulsante Sfoglia, che consente all'utente di selezionare varie immagini.
Una proprietà immagine personalizzata viene implementata con un processo simile a quello usato per l'implementazione di altre proprietà; la principale differenza sta nel fatto che la proprietà personalizzata deve supportare un tipo immagine. Dal momento che l'elemento della proprietà immagine deve essere disegnato dal controllo ActiveX, è necessario effettuare una serie di aggiunte e modifiche alla proprietà prima che possa essere implementata completamente.
Per implementare una proprietà immagine personalizzata, è necessario eseguire le operazioni seguenti:
Aggiungere codice al progetto di controllo.
È necessario aggiungere l'ID di una scheda delle proprietà delle immagini predefinita, un membro dati di tipo
CPictureHolder
e una proprietà personalizzata di tipo LPPICTUREDISP con un'implementazione Get/Set.Modificare numerose funzioni nella classe del controllo.
Queste modifiche verranno apportate a diverse funzioni che sono responsabili del disegno del controllo ActiveX.
Aggiunte al progetto di controllo
Per aggiungere l'ID pagina delle proprietà per la pagina delle proprietà Immagine standard, inserire la riga seguente dopo la macro BEGIN_PROPPAGEIDS nel file di implementazione del controllo (. CPP:
PROPPAGEID(CLSID_CPicturePropPage)
È inoltre necessario incrementare di uno il parametro count della macro BEGIN_PROPPAGEIDS. Questa condizione è illustrata dalla riga seguente:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
Per aggiungere il membro dati CPictureHolder
alla classe del controllo, inserire la riga seguente nella sezione protetta della dichiarazione della classe del controllo nel file di intestazione di controllo (H):
CPictureHolder m_pic;
Non è necessario denominare il membro dati m_pic; qualsiasi nome sarà sufficiente.
Successivamente, aggiungere una proprietà personalizzata che supporta un tipo immagine:
Per aggiungere una proprietà immagine personalizzata con l'Aggiunta guidata proprietà
Caricare il progetto del controllo.
In Visualizzazione classi, espandere il nodo di libreria del controllo.
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.
Dal menu di scelta rapida scegliere Aggiungi e quindi Aggiungi proprietà.
Nella casella Nome proprietà digitare il nome della proprietà. A scopo di esempio, in questa procedura viene usato
ControlPicture
.Nella casella Tipo di proprietà selezionare IPictureDisp* per il tipo di proprietà.
Per Tipo di implementazione, fare clic su Metodi Get/Set.
Digitare nomi univoci per le funzioni Get e Set o accettare i nomi predefiniti (in questo esempio, vengono usati i nomi predefiniti
GetControlPicture
eSetControlPicture
).Fare clic su Fine.
L'Aggiunta guidata proprietà aggiungere il codice seguente tra i commenti della mappa di invio nel file di intestazione del controllo (H):
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
Inoltre, il codice seguente è stato inserito nella mappa di invio del file di implementazione del controllo (CPP):
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
L'Aggiunta guidata proprietà aggiunge anche le due funzioni stub seguenti al 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 classe e funzione di controllo potrebbero essere diversi dall'esempio precedente.
Modifiche del progetto di controllo
Dopo avere apportato le opportune aggiunte al progetto del controllo, è necessario modificare diverse funzioni che interessano il rendering del controllo ActiveX. Queste funzioni, OnResetState
, OnDraw
, e le funzioni Get/Set di una proprietà immagine personalizzata, si trovano nel file di implementazione del controllo Si noti che in questo esempio la classe di controllo è denominata , il CPictureHolder
membro dati viene chiamato CSampleCtrl
m_pic e il nome della proprietà dell'immagine personalizzata è ControlPicture
.)
Nella funzione OnResetState
del controllo, aggiungere la seguente riga facoltativa dopo la chiamata a COleControl::OnResetState
:
m_pic.CreateEmpty();
m_pic.CreateEmpty();
In questo modo verrà impostata un'immagine vuota per il controllo.
Per disegnare l'immagine correttamente, effettuare una chiamata a CPictureHolder::Render nella funzione OnDraw
del controllo. Modificare la funzione in modo simile all'esempio seguente:
void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
if (!pdc)
return;
m_pic.Render(pdc, rcBounds, rcBounds);
}
Nella funzione Get della proprietà immagine personalizzata del controllo, aggiungere la riga seguente:
return m_pic.GetPictureDispatch();
return m_pic.GetPictureDispatch();
Nella funzione Set della proprietà immagine personalizzata del controllo, aggiungere le righe seguenti:
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
La proprietà immagine deve essere resa persistente, in modo che le informazioni aggiunte in fase di progettazione siano visualizzate in fase di esecuzione. Aggiungere la riga seguente alla funzione COleControl
della classe derivata da DoPropExchange
:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
Nota
I nomi di classe e funzione potrebbero essere diversi dall'esempio precedente.
Dopo aver completato le modifiche, ricompilare il progetto per incorporare le nuove funzionalità della proprietà immagine personalizzata e usare Test Container per testare la nuova proprietà. Per informazioni su come accedere al Test Container, vedere Test di proprietà ed eventi con Test Container .
Vedi anche
Controlli ActiveX MFC
Controlli ActiveX MFC: utilizzo dei tipi di carattere
Controlli ActiveX MFC: pagine delle proprietà