Freigeben über


ActiveX-Steuerelementcontainer: Programmieren von ActiveX-Steuerelementen in einem ActiveX-Steuerelementcontainer

Dieser Artikel beschreibt das Verfahren zum Zugriff verfügbar gemachte Methoden und im Eigenschaften von eingebetteten ActiveX-Steuerelemente. Grundsätzlich führen Sie folgende Schritte aus:

  1. Fügen Sie ein ActiveX-Steuerelement in das ActiveX-Containerprojekt ein mithilfe des Katalogs.

  2. Definieren Sie eine Membervariable (oder ein anderes Formular des Zugriffs) desselben Typs als die ActiveX-Steuerelement-Wrapperklasse ein.

  3. Programmieren Sie das ActiveX-Steuerelement mithilfe vordefinierter Memberfunktionen der Wrapperklasse.

Für diese Diskussion wird angenommen, dass Sie ein dialogfeldbasiertes Projekt (mit dem Namen bin) mit ActiveX-Steuerelement-Unterstützung erstellt haben. Das Circ-Beispielsteuerelement, Circ, wird dem resultierenden Projekt hinzugefügt.

Sobald das Circ-Steuerelement in das Projekt eingefügt wird (Schritt 1), fügen eine Instanz des Circ-Steuerelements im Hauptdialogfeld der Anwendung ein.

Prozeduren

Um dem Circ-Steuerelement der Dialogfeldvorlage hinzufügen

  1. Laden Sie das ActiveX-Steuerelement-Containerprojekt. Verwenden Sie beispielsweise das Projekt Container.

  2. Klicken Sie auf die Registerkarte Ressourcenansicht.

  3. Öffnen Sie den Ordner Dialogfeld.

  4. Doppelklicken Sie auf die Hauptdialogfeldvorlage. Verwenden Sie beispielsweise IDD_CONTAINER_DIALOG.

  5. Klicken Sie auf das Circ-Steuersymbol in der Toolbox.

  6. Klicken Sie auf eine Stelle innerhalb des Dialogfelds, um das Circ-Steuerelement einzufügen.

  7. Wählen Sie im Menü Datei wählen Sie Alle speichern, um alle Änderungen der Dialogfeldvorlage zu speichern.

Änderungen zum Projekt

Um die Containeranwendung zu aktivieren auf das Circ-Steuerelement zuzugreifen, fügt Visual C++ dem Containerprojekt automatisch die Implementierungsdatei (.CPP) der Wrapperklasse (CCirc) und der Dialogfeldheaderdatei die Wrapperklassenkopfzeile (.H) Datei hinzu:

#include "circ.h"

Die Wrapperklassen-Kopfzeile (.H) Datei

Um Eigenschaften (und Methoden aufrufen) für das Circ-Steuerelement abzurufen und festzulegen, stellt die CCirc - Wrapperklasse eine Deklaration aller verfügbar gemachten Methoden und Eigenschaften. Im Beispiel werden diese Deklarationen in CIRC.H. gefunden. Das folgende Beispiel ist Teil der CCirc-Klasse, die verfügbar gemachten Schnittstellen des ActiveX-Steuerelements definiert:

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);
   }
};

Diese Features können von der anderer Prozeduren der Anwendung mit normaler C++-Syntax dann aufgerufen werden. Weitere Informationen zur Verwendung dieser Memberfunktion, die festgelegt wird, um auf die Methoden und Eigenschaften des Steuerelements zugreifen, finden Sie im Abschnitt Programmierung des ActiveX-Steuerelements.

Membervariablen-Änderungen zum Projekt

Sobald das ActiveX-Steuerelement dem Projekt hinzugefügt wurde und in einem Dialogfeldcontainer eingebettet wurde, kann darauf von anderen Teilen des Projekts zugegriffen werden. Die einfachste Möglichkeit, auf das Steuerelement zugegriffen wird erstellen Sie eine Membervariable der Dialogklasse, CContainerDlg (Schritt 2), der vom gleichen Typ wie die Wrapperklasse handelt, die dem Projekt von Visual C++ wird hinzugefügt. Sie können die Membervariable dann verwenden, um auf das eingebettete Steuerelement jederzeit zuzugreifen.

Wenn das Dialogfeld der m_circctlMembervariable hinzufügen-Membervariable dem Projekt hinzugefügt, wird auch die folgenden Zeilen hinzu der Headerdatei (.H) der CContainerDlg-Klasse:

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;


...


};

Außerdem wird ein Aufruf DDX_Control automatisch der CContainerDlg Implementierung von DoDataExchange hinzugefügt:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Programmierung des ActiveX-Steuerelements

Sie haben jetzt das ActiveX-Steuerelement in der Dialogfeldvorlage eingefügt und eine Membervariable für diese erstellt. Sie können allgemeine C++-Syntax jetzt verwenden, um die auf Eigenschaften und Methoden des eingebetteten Steuerelements zuzugreifen.

Als bekannte (in Die Wrapperklassen-Kopfzeile (.H) Datei), die Headerdatei (.H) für die CCirc - Wrapperklasse, in diesem Fall CIRC.H, enthält eine Liste mit Memberfunktionen, die Sie verwenden können, um jeden verfügbar gemachte Eigenschaft abzurufen und festzulegen. Memberfunktionen für verfügbar gemachte Methoden sind auch verfügbar.

Ein allgemeiner Position, an der Eigenschaften des Steuerelements zu ändern ist in der OnInitDialog-Memberfunktion der Hauptdialogfeldklasse. Diese Funktion wird, bevor das Dialogfeld angezeigt wird und verwendet wird, um den Inhalt zu initialisieren, einschließlich seiner Steuerelemente bezeichnet.

Das folgende Codebeispiel verwendet die m_circctl-Membervariable, um die Beschriftungs- und CircleShape-Eigenschaften des eingebetteten Circ-Steuerelements zu ändern:

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
}

Siehe auch

Konzepte

ActiveX-Steuerelementcontainer