Ovládací prvek ActiveX kontejnerů: Programování v kontejneru ovládací prvek ActiveX Ovládací prvky ActiveX
Tento článek popisuje proces pro přístup ohrožené metody a Vlastnosti vložené ovládací prvky ActiveX.Bude v podstatě, postupujte takto:
Vložení ovládacího prvku ActiveX do projektu kontejneru ActiveX pomocí Galerie.
Definovat členské proměnné (nebo jiné formy přístupu) stejného typu jako ActiveX řídit wrapper třídu.
Ovládací prvek ActiveX programu pomocí předdefinované funkce členů třídy obálky.
Této diskuse předpokládají, že jste vytvořili projekt založen dialogové okno (název kontejneru) s podporou pro ovládací prvek ActiveX.Oběžník kontrolu vzorku, oběžník, budou přidány do výsledné projektu.
Po vložení ovládacího prvku oběžník do projektu (krok 1) je vložte do hlavní dialogové okno aplikace instance ovládacího prvku oběžníku.
Procedury
Přidat ovládací prvek oběžník dialogové okno šablony
Načtěte projekt kontejneru ActiveX control.Tento příklad použití Container projektu.
Klepněte na záložkuZobrazení Zdrojů.
Otevřít dialogové okno složky.
Poklepejte na šablonu pole hlavního dialogového okna.Například pomocí IDD_CONTAINER_DIALOG.
Klepněte na ikonu oběžník ovládacího panelu nástrojů.
Klepněte na místě v dialogovém okně Vložit ovládací prvek oběžníku.
Z soubor nabídce zvolte Uložit všechny uložit všechny změny šablony pole dialogového okna.
Úpravy projektu
Chcete-li povolit přístup k řízení oběžník aplikace kontejneru Visual C++ automaticky přidá třídy obálky (CCirc) provádění souboru (.CPP) projektu kontejneru a záhlaví třídy obálky (.H) soubor dialogové okno pole záhlaví souboru:
#include "circ.h"
Záhlaví třídy obálky (.H) souboru
Získání a nastavení vlastností (a vyvolání metod) pro řízení oběžník CCirc wrapper třídu obsahuje prohlášení všech vystavených metod a vlastností.V příkladu tato prohlášení jsou nalezeny v CIRC.H.V následující ukázce je část třídy CCirc definuje vystavovaných 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 lze potom volat z jiné aplikace postupy pomocí syntaxe normální C++.Další informace o použití této členské funkce nastavit přístup metody a vlastnosti ovládacího prvku naleznete v části programování ovládacího prvku ActiveX.
Členské proměnné úpravy projektu
Jakmile do projektu přidány ovládací prvek ActiveX a v dialogovém okně pole kontejner lze přistupovat z jiných částí projektu.Nejjednodušší řízení přístupu je vytvořit členské proměnné třídy dialogové okno CContainerDlg (krok 2), je stejného typu jako souhrnný třídy do projektu přidány Visual C++.Potom můžete členské proměnné přístup kdykoli vložený ovládací prvek.
Při Přidat členské proměnné přidá dialogové okno m_circctl členské proměnné v projektu, přidá také následující řádky záhlaví souboru (.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ě volání DDX_Control je automaticky přidán do CContainerDlgna provádění DoDataExchange:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Programování ovládacího prvku ActiveX
V tomto okamžiku jste vložili ovládací prvek ActiveX do šablony v dialogovém okně a pro něj vytvořen členské proměnné.Společné syntaxe C++ můžete nyní získat přístup k vlastnostem a metodám vložený ovládací prvek.
Jak bylo uvedeno (v záhlaví třídy obálky (.Soubor H)), soubor záhlaví (.H) pro CCirc wrapper třídu, v tomto případě CIRC.H, obsahuje seznam členské funkce, které můžete nastavit libovolnou hodnotu vystavených vlastnost.Funkce členů vystavených metody jsou k dispozici.
Je společné místo můžete změnit vlastnosti ovládacího prvku OnInitDialog členské funkce třídu hlavního dialogového okna.Tato funkce se nazývá těsně před, zobrazí se dialogové okno a slouží k inicializaci její obsah včetně všech ovládacích prvků.
Následující kód například používá m_circctl změnit titulek a CircleShape vlastnosti ovládacího prvku vloženého oběžník členské proměnné:
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
}