Sdílet prostřednictvím


ActiveX – kontejnery ovládacích prvků: Programování ovládacích prvků ActiveX v kontejneru ovládacího prvku ActiveX

Tento článek popisuje proces přístupu k vystaveným metodám a vlastnostem vložených ovládacích prvků technologie ActiveX.

Důležité

technologie ActiveX je starší technologie, která by se neměla používat pro nový vývoj. Další informace o moderních technologiích, které nahrazují technologie ActiveX, najdete v tématu technologie ActiveX Ovládací prvky.

V podstatě budete postupovat takto:

  1. Vložte ovládací prvek technologie ActiveX do projektu kontejneru technologie ActiveX pomocí galerie.

  2. Definujte členovou proměnnou (nebo jinou formu přístupu) stejného typu jako třída obálky ovládacího prvku technologie ActiveX.

  3. Naprogramujte ovládací prvek technologie ActiveX pomocí předdefinovaných členských funkcí třídy obálky.

V této diskuzi předpokládejme, že jste vytvořili projekt založený na dialogu (pojmenovaný Kontejner) s podporou ovládacího prvku technologie ActiveX. Do výsledného projektu se přidá ovládací prvek Circ sample, Circ.

Po vložení ovládacího prvku Circ do projektu (krok 1) vložte instanci ovládacího prvku Circ do hlavního dialogového okna aplikace.

Procedury

Přidání ovládacího prvku Circ do šablony dialogového okna

  1. Načtěte projekt kontejneru technologie ActiveX řízení. V tomto příkladu Container použijte projekt.

  2. Klikněte na kartu Zobrazení zdrojů.

  3. Otevřete složku Dialogové okno.

  4. Poklikejte na šablonu hlavního dialogového okna. V tomto příkladu použijte IDD_CONTAINER_DIALOG.

  5. Klikněte na ikonu ovládacího prvku Circ na panelu nástrojů.

  6. Kliknutím na místo v dialogovém okně vložíte ovládací prvek Circ.

  7. V nabídce Soubor zvolte Uložit vše a uložte všechny změny v šabloně dialogového okna.

Úpravy projektu

Aby aplikace Container mohla přistupovat k ovládacímu prvku Circ, Visual C++ automaticky přidá implementační soubor třídy obálky (CCirc). CPP) do projektu kontejneru a hlavičky třídy obálky (. H) soubor do souboru záhlaví dialogového okna:

#include "circ.h"

Hlavička třídy obálky (. H) Soubor

Chcete-li získat a nastavit vlastnosti (a vyvolat metody) pro circ řízení, obálka CCirc třída poskytuje deklaraci všech vystavených metod a vlastností. V příkladu jsou tyto deklarace nalezeny v CIRC.H. Následující ukázka je část třídyCCirc, která definuje vystavená rozhraní ovládacího prvku technologie ActiveX:

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

Tyto funkce je pak možné volat z jiných postupů aplikace pomocí normální syntaxe jazyka C++. Další informace o použití této členské funkce nastavené pro přístup k metodám a vlastnostem ovládacího prvku naleznete v části Programování ovládacího prvku technologie ActiveX.

Úpravy členské proměnné projektu

Jakmile se ovládací prvek technologie ActiveX přidá do projektu a vloží se do kontejneru dialogového okna, bude k němu mít přístup i ostatní části projektu. Nejjednodušším způsobem, jak získat přístup k ovládacímu prvku, je vytvořit členovou proměnnou třídy CContainerDlg dialogového okna (krok 2), která je stejného typu jako třída obálky přidaná do projektu visual C++. Členské proměnné pak můžete kdykoli použít pro přístup k vloženým ovládacím prvkům.

Když dialogové okno Přidat členovou proměnnou přidá do projektu m_circctl členovou proměnnou, přidá do souboru záhlaví také následující řádky (. H) CContainerDlg třídy:

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

Kromě toho se volání DDX_Control automaticky přidá do CContainerDlgimplementace DoDataExchange:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Programování ovládacího prvku technologie ActiveX

V tuto chvíli jste do šablony dialogového okna vložili ovládací prvek technologie ActiveX a vytvořili pro něj členovou proměnnou. Nyní můžete použít běžnou syntaxi jazyka C++ pro přístup k vlastnostem a metodám vloženého ovládacího prvku.

Jak je uvedeno (v záhlaví třídy obálky (. H) Soubor), hlavičkový soubor (. H) pro CCirc třídu obálky, v tomto případě CIRC. H, obsahuje seznam členských funkcí, které můžete použít k získání a nastavení libovolné hodnoty vystavené vlastnosti. K dispozici jsou také členské funkce pro vystavené metody.

Běžným místem pro úpravu vlastností ovládacího prvku je OnInitDialog členská funkce hlavní třídy dialogového okna. Tato funkce se volá těsně před zobrazením dialogového okna a slouží k inicializaci jejího obsahu, včetně některého z jeho ovládacích prvků.

Následující příklad kódu používá m_circctl členské proměnné k úpravě vlastností Caption a CircleShape vloženého ovládacího prvku Circ:

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
}

Viz také

ActiveX – kontejnery ovládacích prvků