Condividi tramite


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 MDI, è necessario incorporare un controllo in una finestra dell'applicazione. La funzione Create member della classe wrapper, inserita da Visual C++, può creare un'istanza del controllo in modo dinamico, senza la necessità di una finestra di dialogo.

La funzione Create member ha i parametri seguenti:

lpszWindowName
Puntatore al testo da visualizzare nella proprietà Text o Caption del controllo (se presente).

dwStyle
Stili di Windows. Per un elenco completo, vedere CWnd::CreateControl.

rect
Specifica le dimensioni e la posizione del controllo.

pParentWnd
Specifica la finestra padre del controllo, in genere un oggetto CDialog. Non deve essere NULL.

nID
Specifica l'ID del controllo e può essere usato dal contenitore per fare riferimento al controllo.

Un esempio di utilizzo di questa funzione per creare dinamicamente un controllo ActiveX sarebbe in una visualizzazione maschera di un'applicazione SDI. È quindi possibile creare un'istanza del controllo nel WM_CREATE gestore dell'applicazione.

Per questo esempio, CMyView è la classe di visualizzazione principale, CCirc è la classe wrapper e CIRC. H è l'intestazione (. H) file della classe wrapper.

L'implementazione di questa funzionalità è un processo in quattro passaggi.

Per creare dinamicamente un controllo ActiveX in una finestra non di dialogo

  1. Inserire CIRC. H in CMYVIEW. H, subito prima della definizione della CMyView classe:

    #include "circ.h"
    
  2. Aggiungere una variabile membro (di tipo CCirc) alla sezione protetta della definizione della CMyView classe che si trova in CMYVIEW. H:

    class CMyView : public CView
    {
    
    protected:
    CCirc m_myCtl;
    
    public:
    afx_msg void OnViewCircdlg();
    }
    ;
    
  3. Aggiungere un WM_CREATE gestore di messaggi alla classe CMyView.

  4. Nella funzione CMyView::OnCreatedel gestore eseguire una chiamata alla funzione del Create controllo usando il this puntatore come 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;
    }
    
  5. Ricompilare il progetto. Ogni volta che viene creata la visualizzazione dell'applicazione, verrà creato un controllo Circ in modo dinamico.

Vedi anche

Contenitori di controlli ActiveX