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:
Fügen Sie ein ActiveX-Steuerelement in das ActiveX-Containerprojekt mithilfe von Gallery ein.
Definieren Sie eine Membervariable (oder eine andere Art von Zugriff) desselben Typs wie die ActiveX-Steuerelementwrapperklasse.
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
Laden Sie das ActiveX-Steuerelementcontainerprojekt. Verwenden Sie für dieses Beispiel das
Container
Projekt.Klicken Sie auf die Registerkarte "Ressourcenansicht".
Öffnen Sie den Dialogfeldordner.
Doppelklicken Sie auf die Dialogfeldvorlage Standard. Verwenden Sie in diesem Beispiel IDD_CONTAINER_DIALOG.
Klicken Sie in der Toolbox auf das Circ-Steuerelementsymbol.
Klicken Sie auf eine Stelle im Dialogfeld, um das Circ-Steuerelement einzufügen.
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 CContainerDlg
Implementierung 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
}