Delen via


ActiveX-besturingscontainers: ActiveX-besturingselementen programmeren in een ActiveX-besturingscontainer

In dit artikel wordt het proces beschreven voor toegang tot de weergegeven methoden en eigenschappen van ingesloten ActiveX-besturingselementen.

Belangrijk

ActiveX is een verouderde technologie die niet mag worden gebruikt voor nieuwe ontwikkeling. Zie ActiveX-besturingselementen voor meer informatie over moderne technologieën die ActiveX vervangen.

In principe volgt u deze stappen:

  1. Voeg een ActiveX-besturingselement in het ActiveX-containerproject in met behulp van de galerie.

  2. Definieer een lidvariabele (of een andere vorm van toegang) van hetzelfde type als de ActiveX-besturingselement-wrapperklasse.

  3. Programmeer het ActiveX-besturingselement met behulp van vooraf gedefinieerde lidfuncties van de wrapper-klasse.

Voor deze discussie wordt ervan uitgegaan dat u een op dialoogvensters gebaseerd project (met de naam Container) hebt gemaakt met ondersteuning voor ActiveX-besturingselementen. Het voorbeeld van besturingselement Circ, Circ, wordt toegevoegd aan het resulterende project.

Zodra het besturingselement Circ is ingevoegd in het project (stap 1), voegt u een exemplaar van het besturingselement Circ in het hoofddialoogvenster van de toepassing in.

Werkwijzen

Het besturingselement Circ toevoegen aan de dialoogvenstersjabloon

  1. Laad het ActiveX-containerproject voor besturingselementen. Gebruik voor dit voorbeeld het Container project.

  2. Klik op het tabblad Resourceweergave.

  3. Open de map Dialoogvenster .

  4. Dubbelklik op de hoofddialoogvenstersjabloon. Gebruik voor dit voorbeeld IDD_CONTAINER_DIALOG.

  5. Klik op het pictogram van het besturingselement Circ in de werkset.

  6. Klik op een plek in het dialoogvenster om het besturingselement Circ in te voegen.

  7. Kies Alles opslaan in het menu Bestand om alle wijzigingen op te slaan in de dialoogvenstersjabloon.

Wijzigingen in het project

Als u de containertoepassing toegang wilt geven tot het Circ-besturingselement, voegt Visual C++ automatisch het implementatiebestand van de wrapperklasse (CCirc) (.CPP) toe aan het containerproject en het headerbestand van de wrapperklasse (.H) aan het headerbestand van het dialoogvenster:

#include "circ.h"

De header van de Wrapperklasse (.H) bestand

Voor het ophalen en instellen van eigenschappen (en het aanroepen van methoden) voor het Circ-besturingselement, biedt de CCirc wrapper-klasse een declaratie van alle weergegeven methoden en eigenschappen. In het voorbeeld vindt u deze declaraties in CIRC.H. Het volgende voorbeeld is het gedeelte van de klasse CCirc waarmee de weergegeven interfaces van het ActiveX-besturingselement worden gedefinieerd:

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

Deze functies kunnen vervolgens worden aangeroepen vanuit andere procedures van de toepassing met behulp van de normale C++-syntaxis. Zie de sectie Programmeren van het ActiveX-besturingselement voor meer informatie over het gebruik van deze lidfunctie die is ingesteld voor toegang tot de methoden en eigenschappen van het besturingselement.

Wijzigingen van lidvariabelen in het project

Zodra het ActiveX-besturingselement is toegevoegd aan het project en is ingesloten in een dialoogvenstercontainer, kan het worden geopend door andere onderdelen van het project. De eenvoudigste manier om toegang te krijgen tot het besturingselement is door een lidvariabele van de dialoogvensterklasse ( CContainerDlg stap 2) te maken die van hetzelfde type is als de wrapper-klasse die door Visual C++ aan het project is toegevoegd. Vervolgens kunt u de lidvariabele gebruiken om op elk gewenst moment toegang te krijgen tot het ingesloten besturingselement.

Wanneer het dialoogvenster Lidvariabele toevoegen de m_circctl lidvariabele aan het project toevoegt, worden ook de volgende regels toegevoegd aan het headerbestand (. H) van de 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;
};

Daarnaast wordt automatisch een aanroep van DDX_Control toegevoegd aan de CContainerDlgimplementatie van DoDataExchange:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Het ActiveX-besturingselement programmeren

Op dit moment hebt u het ActiveX-besturingselement in uw dialoogvenstersjabloon ingevoegd en hiervoor een lidvariabele gemaakt. U kunt nu algemene C++-syntaxis gebruiken voor toegang tot de eigenschappen en methoden van het ingesloten besturingselement.

Zoals vermeld (in het headerbestand (.H) van de wrapperklasse), het headerbestand (.H) voor de CCirc wrapperklasse, in dit geval CIRC.H, bevat een lijst met lidfuncties die u kunt gebruiken om elke blootgestelde eigenschapswaarde op te halen en in te stellen. Lidfuncties voor bekendgemaakte methoden zijn ook beschikbaar.

Een algemene plaats om de eigenschappen van het besturingselement te wijzigen, bevindt zich in de OnInitDialog lidfunctie van de hoofddialoogvensterklasse. Deze functie wordt net voordat het dialoogvenster wordt weergegeven aangeroepen en wordt gebruikt om de inhoud te initialiseren, inclusief een van de besturingselementen.

In het volgende codevoorbeeld wordt de variabele m_circctl lid gebruikt om de eigenschappen Caption en CircleShape van het ingesloten Circ-besturingselement te wijzigen:

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
}

Zie ook

ActiveX-besturingscontainers