Sdílet prostřednictvím


Kontejnery ovládacích prvků ActiveX: 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ů ActiveX.

Důležité

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

V podstatě budete postupovat takto:

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

  2. Definujte členovou proměnnou (nebo jiný způsob přístupu) stejného typu jako obalová třída ovládacího prvku ActiveX.

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

V této diskuzi předpokládejme, že jste vytvořili projekt založený na dialogu (pojmenovaný kontejner) s podporou ovládacího prvku 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.

Postupy

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

  1. Načtěte projekt kontejneru ovládacího prvku ActiveX. Pro tento příklad použijte projekt Container.

  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á soubor implementace třídy obálky (.CPP) do projektu Container a soubor hlavičky třídy obálky (.H) 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í, třída obálky CCirc 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řídy CCirc , která definuje vystavená rozhraní ovládacího prvku 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 ActiveX.

Úpravy proměnných členů projektu

Po přidání ovládacího prvku ActiveX do projektu a jeho vložení do kontejneru dialogového okna je možné k němu přistupovat jinými částmi projektu. Nejjednodušším způsobem, jak získat přístup k ovládacímu prvku, je vytvořit členovou proměnnou třídy dialogu CContainerDlg (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 členskou proměnnou přidá do projektu členskou proměnnou m_circctl, přidá také následující řádky do souboru záhlaví (.H) třídy CContainerDlg.

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 automaticky přidá volání DDX_Control do implementace CContainerDlgDoDataExchange.

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Programování ovládacího prvku ActiveX

V tuto chvíli jste ovládací prvek ActiveX vložili do šablony dialogového okna a vytvořili pro ni č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 hlavičkovém souboru třídy obálky (.H)), 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á proměnnou m_circctl členu 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é

Kontejnery ovládacích prvků ActiveX