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

In diesem Artikel wird der Prozess für den Zugriff auf die verfügbar gemachten Methoden und Eigenschaften eingebetteter ActiveX-Steuerelemente beschrieben.

Wichtig

ActiveX ist eine Legacytechnologie, die nicht für neue Software verwendet werden sollte. Weitere Informationen zu modernen Technologien, die ActiveX ablösen, finden Sie unter ActiveX-Steuerelemente.

Im Grunde führen Sie die folgenden Schritte aus:

  1. Fügen Sie ein ActiveX-Steuerelement in das ActiveX-Containerprojekt mithilfe von Gallery ein.

  2. Definieren Sie eine Membervariable (oder eine andere Art von Zugriff) desselben Typs wie die ActiveX-Steuerelementwrapperklasse.

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

Gehen Sie für diese Diskussion davon aus, dass Sie ein dialogbasiertes Projekt (mit dem Namen Container) mit Unterstützung für ActiveX-Steuerelemente erstellt haben. Das Circ-Beispielsteuerelement Circ wird dem resultierenden Projekt hinzugefügt.

Sobald das Circ-Steuerelement in das Projekt eingefügt wurde (Schritt 1), fügen Sie eine Instanz des Circ-Steuerelements in das Dialogfeld Standard der Anwendung ein.

Prozeduren

So fügen Sie das Circ-Steuerelement zur Dialogfeldvorlage hinzu

  1. Laden Sie das ActiveX-Steuerelementcontainerprojekt. Verwenden Sie für dieses Beispiel das Container Projekt.

  2. Klicken Sie auf die Registerkarte "Ressourcenansicht".

  3. Öffnen Sie den Dialogfeldordner.

  4. Doppelklicken Sie auf die Dialogfeldvorlage Standard. Verwenden Sie in diesem Beispiel IDD_CONTAINER_DIALOG.

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

  6. Klicken Sie auf eine Stelle im Dialogfeld, um das Circ-Steuerelement einzufügen.

  7. Wählen Sie im Menü "Datei " die Option "Alle speichern" aus, um alle Änderungen in der Dialogfeldvorlage zu speichern.

Änderungen am Projekt

Damit die Containeranwendung auf das Circ-Steuerelement zugreifen kann, fügt Visual C++ automatisch die Wrapperklasse () Implementierungsdatei (CCirc) hinzu. CPP) für das Containerprojekt und den Wrapperklassenheader (. H) Datei in der Headerdatei des Dialogfelds:

#include "circ.h"

Der Wrapper-Klassenheader (. H) Datei

Zum Abrufen und Festlegen von Eigenschaften (und Aufrufen von Methoden) für das Circ-Steuerelement stellt die CCirc Wrapperklasse eine Deklaration aller verfügbar gemachten Methoden und Eigenschaften bereit. Im Beispiel werden diese Deklarationen in CIRC.H gefunden. Das folgende Beispiel ist der Teil der Klasse CCirc , der 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 Funktionen können dann von anderen Prozeduren der Anwendung mithilfe einer normalen C++-Syntax aufgerufen werden. Weitere Informationen zur Verwendung dieser Memberfunktion, die für den Zugriff auf die Methoden und Eigenschaften des Steuerelements festgelegt ist, finden Sie im Abschnitt Programmierung des ActiveX-Steuerelements.

Änderungen der Membervariablen an das Projekt

Nachdem das ActiveX-Steuerelement dem Projekt hinzugefügt und in einen Dialogfeldcontainer eingebettet wurde, kann es von anderen Teilen des Projekts aufgerufen werden. Am einfachsten können Sie auf das Steuerelement zugreifen, indem Sie eine Membervariable der Dialogklasse (Schritt 2) erstellen, CContainerDlg die dem Projekt von Visual C++ hinzugefügt wurde. Anschließend können Sie die Membervariable verwenden, um jederzeit auf das eingebettete Steuerelement zuzugreifen.

Wenn das Dialogfeld "Membervariable hinzufügen" die m_circctl Membervariable zum Projekt hinzufügt, fügt es auch die folgenden Zeilen zur Headerdatei hinzu (. 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;
};

Darüber hinaus wird automatisch ein Aufruf an DDX_Control zur CContainerDlgImplementierung von DoDataExchange:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Programmieren des ActiveX-Steuerelements

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

Wie erwähnt (im Wrapper-Klassenheader (. H) Datei), die Headerdatei (. H) für die CCirc Wrapperklasse, in diesem Fall CIRC. H enthält eine Liste von Memberfunktionen, die Sie verwenden können, um alle verfügbar gemachten Eigenschaftswerte abzurufen und festzulegen. Memberfunktionen für verfügbar gemachte Methoden sind ebenfalls verfügbar.

Ein häufiger Ort zum Ändern der Eigenschaften des Steuerelements befindet sich in der OnInitDialog Memberfunktion der Standard Dialogklasse. Diese Funktion wird unmittelbar vor dem Anzeigen des Dialogfelds aufgerufen und zum Initialisieren des Inhalts verwendet, einschließlich aller Steuerelemente.

Im folgenden Codebeispiel wird die m_circctl Membervariable verwendet, 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

ActiveX-Steuerelementcontainer