Kontenery formantów ActiveX: programowanie formantów ActiveX w kontenerze formantów ActiveX
W tym artykule opisano proces uzyskiwania dostępu do narażonych metody i Właściwości osadzone formantów ActiveX.Będzie w zasadzie, wykonaj następujące kroki:
Umożliwia wstawienie formantu ActiveX do projektu kontenera ActiveX za pomocą galerii.
Zdefiniuj zmienną (lub inne formy dostępu) tego samego typu co ActiveX kontrolować klasy otoki.
Program formantu ActiveX za pomocą wstępnie zdefiniowane funkcje składowe klasy otoki.
Dla tej dyskusji przyjęto założenie, że projekt dokończyć (o nazwie kontenera) został utworzony z obsługi formantów ActiveX.Circ próbki kontrolnej, Circ, zostaną dodane do wynikowym projekcie.
Po kontroli OK jest wstawiany do projektu (krok 1), włóż instancję formantu Circ do głównego okna dialogowego aplikacji.
Procedury
Aby dodać formant Circ w szablonie okno
Załaduj projekt kontenera formantu ActiveX.W tym przykładzie należy użyć Container projektu.
Kliknij kartę Widok zasobów.
Otwórz okno dialogowe folder.
Kliknij dwukrotnie szablon główne okno dialogowe.W tym przykładzie należy użyć IDD_CONTAINER_DIALOG.
Kliknij ikonę formant Circ w przyborniku.
Kliknij miejsce w oknie dialogowym, aby wstawić formant OK.
Od pliku menu, wybierz polecenie Zapisz wszystko Aby zapisać wszystkie zmiany w szablonie pole dialogowe.
Zmiany do projektu
Aby umożliwić aplikacji kontenera do Circ kontroli dostępu, Visual C++ automatycznie dodaje klasy otoki (CCirc) pliku implementacji (.CPP) do projektu kontenera i nagłówek klasy otoki (.H) plik do pliku okno dialogowe nagłówka:
#include "circ.h"
Nagłówek klasy otoki (.H) plik
Aby uzyskać i ustawić właściwości (i wywołania metod) do celów kontroli Circ, CCirc klasy otoki zawiera deklarację wszystkich narażonych metody i właściwości.W tym przykładzie deklaracje te znajdują się w okólnikH.Poniższy przykład jest częścią klasy CCirc , definiująca interfejsów formantu 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);
}
};
Funkcje te można następnie wywoływana z innych procedur aplikacji przy użyciu składni języka C++ normalnej.Aby uzyskać więcej informacji o korzystaniu z tej funkcji Członkowskich Ustaw dostęp do metod i właściwości formantu, zobacz sekcję programowania formantu ActiveX.
Członek modyfikacje zmiennych do projektu
Gdy formant ActiveX został dodany do projektu i osadzone w kontenerze pole dialogowe, możliwy jest przez inne części projektu.Najprostszym sposobem kontroli dostępu jest utworzyć zmienną klasy okno dialogowe CContainerDlg (krok 2), to znaczy tego samego typu, co klasy otoki dodane do projektu w języku Visual C++.Następnie można użyć zmiennej Członkowskich dostępu z osadzonego formantu w dowolnym momencie.
Gdy Dodać zmienną okno dialogowe dodaje m_circctl Członkowskich zmiennej do projektu, dodane również następujące wiersze do pliku nagłówka (.H) z CContainerDlg klasy:
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;
...
};
Dodatkowo, numer telefonu, aby DDX_Control jest automatycznie dodawany do CContainerDlgw realizacji DoDataExchange:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Programowania formantu ActiveX
W tym momencie masz wstawiony formant ActiveX do szablonu okno dialogowe i utworzona zmienna członka.Wspólne składni języka C++ umożliwia teraz dostęp do właściwości i metod kontroli osadzonego.
Jak zauważono (w Nagłówek klasy otoki (.H) pliku), pliku nagłówka (.H) do CCirc klasy otoki, w tym przypadku okólnikH, zawiera wykaz państw funkcji, których można użyć, aby uzyskać i ustawić wszystkie wartości właściwości narażonych.Dostępne są także funkcji elementów członkowskich dla metod narażonych.
Wspólne miejsce do modyfikowania właściwości formantu jest w OnInitDialog funkcji składowej klasy główne okno dialogowe.Ta funkcja zostaje wywołana tuż przed pojawi się okno dialogowe i służy do inicjowania jego zawartość, łącznie z jego formantów.
Następujący kod w przykładzie wykorzystano m_circctl zmienną do modyfikowania właściwości Caption i CircleShape z osadzonego formantu OK:
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
}