Contenitori di controlli ActiveX: utilizzo di controlli in un contenitore diverso da una finestra di dialogo
In alcune applicazioni, ad esempio un'applicazione SDI o un'applicazione MDI, sarà necessario importare un controllo in una finestra dell'applicazione. La funzione membro di Crea della classe wrapper, immessa da Visual C++, può creare in modo dinamico un'istanza del controllo, senza la necessità di una finestra di dialogo.
La funzione membro di Crea dispone dei seguenti parametri:
lpszWindowName
Un puntatore al testo da visualizzare nella proprietà text o barra del titolo del controllo (se presenti).dwStyle
Stili di windows. Per un elenco completo, vedere CWnd::CreateControl.rect
Specifica la dimensione e la posizione del controllo.pParentWnd
Specifica la finestra padre del controllo, generalmente CDialog. Non deve essere NULL.nID
Specifica l'id del controllo e può essere utilizzato da contenitore per fare riferimento al controllo.
Un esempio di utilizzo di questa funzione per creare dinamicamente un controllo ActiveX formano una visualizzazione form di un'applicazione SDI. È quindi possibile creare un'istanza del controllo nel gestore di WM_CREATE dell'applicazione.
Per questo esempio, CMyView è la classe di visualizzazione principale, CCirc è la classe wrapper e CIRC.H è l'intestazione (. H) file di classe wrapper.
Implementare questa funzionalità è un processo a quattro passaggio.
Per creare dinamicamente un controllo ActiveX in una finestra non finestra di dialogo
Inserire CIRC.H in CMYVIEW.H, subito prima della definizione della classe di CMyView :
#include "circ.h"
Aggiungere una variabile membro (di tipo CCirc) alla sezione protected della definizione della classe di CMyView trova in CMYVIEW.H:
class CMyView : public CView { ... protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); };
Aggiungere un gestore messaggi di WM_CREATE class CMyView.
Nella funzione di gestione, CMyView::OnCreate, effettua una chiamata alla funzione di Create di controllo utilizzando il puntatore di questo ad esempio la finestra padre:
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_myCtl.Create(NULL, WS_VISIBLE, CRect(50,50,100,100), this, 0); m_myCtl.SetCaption(_T("Control created")); return 0; }
Ricompilare il progetto. Un controllo di Circ verrà creato dinamicamente quando la visualizzazione dell'applicazione viene creata.