Share via


Contenitori di controlli ActiveX: controlli ActiveX di programmazione in un contenitore di controlli ActiveX

In questo articolo viene descritto il processo per accedere a metodi ed esporre proprietà dei controlli ActiveX incorporati.Fondamentalmente, verranno effettuate le seguenti operazioni:

  1. Inserire un controllo ActiveX nel progetto contenitore ActiveX utilizzando la raccolta.

  2. Definire una variabile membro o un altro form di accesso) dello stesso tipo della classe wrapper del controllo ActiveX.

  3. Per programmare il controllo ActiveX mediante le funzioni membro predefinite della classe wrapper.

Per questa discussione, si presupponga di disporre di creato un progetto a finestre (Container denominato) con il supporto per il controllo ActiveX.Il controllo dell'esempio di Circ, Circ, verrà aggiunto al progetto risultante.

Una volta che il controllo di Circ viene inserito nel progetto (passaggio 1), inserire un'istanza del controllo di Circ nella finestra di dialogo principale dell'applicazione.

Procedure

  1. Caricare il progetto di contenitore di controlli ActiveX.Per questo esempio, utilizzare il progetto Container .

  2. Scegliere la scheda Visualizzazione risorse.

  3. Aprire la cartella di Dialog .

  4. Fare doppio clic sul modello di finestra di dialogo principale.Per questo esempio, utilizzare IDD_CONTAINER_DIALOG.

  5. Fare clic sull'icona del controllo di Circ nella casella degli strumenti.

  6. Fare clic su un punto all'interno della finestra di dialogo per inserire il controllo di Circ.

  7. Dal menu di File , scegliere Salva tutto per salvare le modifiche al modello di finestra di dialogo.

Modifiche al progetto

Per abilitare l'applicazione contenitore accedere al controllo di Circ, Visual C++ aggiunge automaticamente il file di implementazione della classe wrapper (CCirc) (.CPP) al progetto del contenitore e all'intestazione della classe wrapper (. H) il file di intestazione della finestra di dialogo:

#include "circ.h"

L'intestazione della classe wrapper (. h) file

Per ottenere e impostare le proprietà e richiamare i metodi per il controllo di Circ, la classe wrapper di CCirc fornisce una dichiarazione di tutti i metodi e le proprietà esposti.Nell'esempio, queste dichiarazioni disponibili in CIRC.H.Nell'esempio è la parte della classe CCirc che definisce le interfacce esposte del controllo ActiveX:

class CCirc : public CWnd
{


...


// Functions
//

   void AboutBox()
   {
      InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
   }

// Properties
//

   unsigned long GetBackColor()
   {
      unsigned long result;
      GetProperty(DISPID_BACKCOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetBackColor(unsigned long propVal)
   {
      SetProperty(DISPID_BACKCOLOR, VT_UI4, propVal);
   }
   signed char GetCircleShape()
   {
      signed char result;
      GetProperty(0x1, VT_I1, (void*)&result);
      return result;
   }
   void SetCircleShape(signed char propVal)
   {
      SetProperty(0x1, VT_I1, propVal);
   }
   short GetCircleOffset()
   {
      short result;
      GetProperty(0x3, VT_I2, (void*)&result);
      return result;
   }
   void SetCircleOffset(short propVal)
   {
      SetProperty(0x3, VT_I2, propVal);
   }
   CString GetCaption()
   {
      CString result;
      GetProperty(DISPID_CAPTION, VT_BSTR, (void*)&result);
      return result;
   }
   void SetCaption(CString propVal)
   {
      SetProperty(DISPID_CAPTION, VT_BSTR, propVal);
   }
   COleFont GetFont()
   {
      LPDISPATCH result;
      GetProperty(DISPID_FONT, VT_DISPATCH, (void*)&result);
      return COleFont(result);
   }
   void SetFont(LPDISPATCH propVal)
   {
      SetProperty(DISPID_FONT, VT_DISPATCH, propVal);
   }
   unsigned long GetForeColor()
   {
      unsigned long result;
      GetProperty(DISPID_FORECOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetForeColor(unsigned long propVal)
   {
      SetProperty(DISPID_FORECOLOR, VT_UI4, propVal);
   }
   CString GetNote()
   {
      CString result;
      GetProperty(0x4, VT_BSTR, (void*)&result);
      return result;
   }
   void SetNote(CString propVal)
   {
      SetProperty(0x4, VT_BSTR, propVal);
   }
   unsigned long GetFlashColor()
   {
      unsigned long result;
      GetProperty(0x2, VT_UI4, (void*)&result);
      return result;
   }
   void SetFlashColor(unsigned long propVal)
   {
      SetProperty(0x2, VT_UI4, propVal);
   }
};

Tali funzioni possono quindi essere chiamata da un'altra le procedure dell'applicazione utilizzando la normale sintassi di C++.Per ulteriori informazioni sull'utilizzo di questa funzione membro impostata per accedere ai metodi e le proprietà del controllo, vedere la sezione Programmazione del controllo ActiveX.

Modifiche variabile membro al progetto

Una volta che il controllo ActiveX è stato aggiunto al progetto ed era incorporato in un contenitore della finestra di dialogo, è possibile accedervi da altre parti del progetto.Il modo più semplice per accedere al controllo è a creare una variabile membro della classe della finestra di dialogo, CContainerDlg (passaggio 2), che è dello stesso tipo della classe wrapper aggiunta al progetto da Visual C++.È quindi possibile utilizzare la variabile membro per accedere al controllo incorporato in qualsiasi momento.

Quando la finestra di dialogo di Add Member Variable aggiungere la variabile membro di m_circctl al progetto, anche aggiungere le righe seguenti al file di intestazione (. H) della classe di CContainerDlg :

class CContainerDlg : public CDialog
{
   DECLARE_DYNAMIC(CContainerDlg)

public:
   CContainerDlg(CWnd* pParent = NULL);   // standard constructor
   virtual ~CContainerDlg();

   virtual void OnFinalRelease();

// Dialog Data
   enum { IDD = IDD_CONTAINER_DIALOG };

protected:
   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

   DECLARE_MESSAGE_MAP()
   DECLARE_DISPATCH_MAP()
   DECLARE_INTERFACE_MAP()
public:
   CCirc m_circctl;


...


};

Inoltre, una chiamata a DDX_Control viene aggiunto automaticamente all'implementazione dei entity_CODECContainerDlg di DoDataExchange:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Programmazione del controllo ActiveX

In questa fase, è stato inserito il controllo ActiveX nel modello di finestra di dialogo e creato una variabile membro per.È ora possibile utilizzare la sintassi comune di C++ per accedere alle proprietà e i metodi del controllo incorporato.

Come celebre (in L'intestazione della classe wrapper (. h) file), il file di intestazione (. H) per la classe wrapper di CCirc , in questo caso CIRC.H, contiene un elenco delle funzioni membro che è possibile utilizzare per ottenere e impostare il valore della proprietà esposta.Le funzioni membro per i metodi esposti sono inoltre disponibili.

Una posizione comune per modificare le proprietà del controllo è la funzione membro di OnInitDialog di classe principale della finestra di dialogo.Questa funzione viene chiamata prima della finestra di dialogo e viene utilizzata per inizializzare il contenuto, inclusi i suoi controlli.

Nell'esempio di codice seguente viene utilizzata la variabile membro di m_circctl per modificare le proprietà di CircleShape e la didascalia del controllo incorporato di Circ:

BOOL CContainerDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_circctl.SetCaption(_T("Circ 2 Control"));
   if(!m_circctl.GetCircleShape())
      m_circctl.SetCircleShape(TRUE);

   return TRUE;  // return TRUE unless you set the focus to a control
}

Vedere anche

Concetti

Contenitori di controlli ActiveX