ActiveX-Steuerelementcontainer: Programmieren von ActiveX-Steuerelementen in einem ActiveX-Steuerelementcontainer
Dieser Artikel beschreibt den Prozess zum Aufrufen verfügbar gemacht Methoden und des Eigenschaften von eingebetteten ActiveX-Steuerelementen.Grundsätzlich führen Sie die folgenden Schritte aus:
Fügen Sie ein ActiveX-Steuerelement in das Projekt ein ActiveX-Container mithilfe des Katalogs.
Definieren Sie eine Membervariable (oder ein anderes Formular des Zugriffs) vom gleichen Typs wie die ActiveX-Steuerelement-Wrapperklasse ein.
Programm das ActiveX-Steuerelement mithilfe der vordefinierten Memberfunktionen der Wrapperklasse.
Für diese Erläuterung wird davon ausgegangen, dass Sie ein auf Dialogfeldern basierenden Projekts (mit dem Namen bin) mit ActiveX-Steuerelement-Unterstützung erstellt haben.Das Circ-Beispiel Circ Steuerelement 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 Main in das Dialogfeld für die Anwendung ein.
Arbeitsschritte
Verwenden Sie zum Hinzufügen der Dialogfeldvorlage Circ-Steuerelement
Laden Sie das Projekt ActiveX-Steuerelement-Container.In diesem Beispiel verwenden Sie das Container Projekt.
Klicken Sie auf die Registerkarte Ressourcenansicht.
Öffnen Sie den Ordner Dialogfeld.
Doppelklicken Sie auf die Hauptversionsnummer Dialogfeldvorlage.In diesem Beispiel verwenden Sie IDD_CONTAINER_DIALOG.
Klicken Sie auf das Symbol Circ-Steuer in der Toolbox.
Klicken Sie auf eine Stelle innerhalb des Dialogfelds, um das Circ-Steuerelement eingefügt werden soll.
Klicken Datei Menü wählen Sie Alle speichern, um alle Änderungen an der Dialogfeldvorlage zu speichern.
Änderungen am Projekt
Um die Containeranwendung zu ermöglichen das Circ-Steuerelement zuzugreifen, fügt Visual C++ automatisch die Implementierungsdatei der Wrapperklasse (CCirc) (.CPP) dem Projekt und dem angegebenen Container hinzu (Header Wrapperklassen. H) zur Datei Dialogfeld headerdatei:
#include "circ.h"
Der Wrapperklassen-Header (. H)
Um Eigenschaften (und Methodenaufrufen) 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.Im folgenden Beispiel ist der Teil der Klasse CCirc, die 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 von anderen Prozeduren der Anwendung mit voller C++-Syntax dann aufgerufen werden.Weitere Informationen zur Verwendung dieser Memberfunktion, die festgelegt wird, um die Methoden und die Eigenschaften des Steuerelements zugreifen, finden Sie im Abschnitt Programmieren des ActiveX-Steuerelements.
Dem Projekt Membervariablen-Änderungen
Sobald das ActiveX-Steuerelement zum Projekt hinzugefügt wurde und Container in einem Dialogfeld eingebettet wurden, kann er von anderen Teilen des Projekts zugegriffen werden.Die einfachste Möglichkeit zum Zugriff ist auf das Steuerelement erstellen Sie eine Membervariable der Dialogfeldklasse, CContainerDlg (Schritt 2), der denselben Typ wie die Wrapperklasse handelt, die von Visual C++ zum Projekt hinzugefügt wird.Sie können die Membervariable dann verwenden, um das eingebettete Steuerelement jederzeit zuzugreifen.
Wenn das Dialogfeld Membervariable hinzufügen die m_circctl-Membervariable dem Projekt hinzugefügt wird, 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 zur DoDataExchange-Implementierung von CContainerDlg hinzugefügt:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Programmieren des ActiveX-Steuerelements
An diesem Punkt können Sie das ActiveX-Steuerelement in der Dialogfeldvorlage eingefügt und eine Membervariable für sie erstellt.Sie können allgemeine C++-Syntax jetzt verwenden, um die Eigenschaften und Methoden des eingebetteten Steuerelements zuzugreifen.
Ein bekanntes (in der Headerdatei ( Der Wrapperklassen-Header (. H)). 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 Eigenschaftswert abzurufen und festzulegen.Memberfunktionen zur verfügbar gemachten Methoden sind ebenfalls verfügbar.
Ein allgemeiner Platz, um die Eigenschaften des Steuerelements zu ändern ist in der OnInitDialog-Memberfunktion der Dialogfeldklasse.Diese Funktion ist, kurz bevor das Dialogfeld wird angezeigt und verwendet wird, um seinen Inhalt zu initialisieren, einschließlich eines seiner Steuerelemente bezeichnet.
Im folgenden Codebeispiel wird 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
}