Contenitori di controlli ActiveX: Utilizzo di controlli in un contenitore Non di Finestra Di Dialogo
In alcune applicazioni, ad esempio una SDI o un'applicazione MDI, sarà necessario includere un controllo in una finestra dell'applicazione.La funzione di creazione di un membro di classe wrapper, immessa da Visual C++, è possibile creare dinamicamente un'istanza del controllo, senza la necessità di una finestra di dialogo.
La funzione di creazione di un membro dispone dei seguenti parametri:
lpszWindowName
Un puntatore al testo da visualizzare nella proprietà del testo o della barra del titolo del controllo (se presente).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, in genere 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 di quattro-passaggio.
Per creare dinamicamente un controllo ActiveX in una finestra di 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) nella sezione protetta 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 per classificare CMyView.
Nella funzione di gestione, CMyView::OnCreate, effettua una chiamata alla funzione di Create di controllo utilizzando il puntatore di this 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 ogni volta che la visualizzazione dell'applicazione viene creata.