Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano proces uzyskiwania dostępu do uwidocznionych metod i właściwości osadzonych kontrolek ActiveX.
Ważne
ActiveX to starsza technologia, która nie powinna być używana do tworzenia nowych rozwiązań. Aby uzyskać więcej informacji na temat nowoczesnych technologii zastępujących activex, zobacz Kontrolki ActiveX.
Zasadniczo wykonasz następujące kroki:
Wstaw kontrolkę ActiveX do projektu kontenera ActiveX przy użyciu galerii.
Zdefiniuj zmienną składową (lub inną formę dostępu) tego samego typu co klasa opakowania kontrolki ActiveX.
Zaprogramuj kontrolkę ActiveX używając wstępnie zdefiniowanych funkcji składowych klasy osłonowej.
W tej dyskusji założono, że utworzono projekt oparty na oknach dialogowych (o nazwie Container) z obsługą kontrolek ActiveX. Kontrolka próbki Circ o nazwie Circ zostanie dodana do wynikowego projektu.
Po wstawieniu do projektu kontrolki Circ (krok 1) umieść jej wystąpienie w głównym oknie dialogowym aplikacji.
Procedury
Aby dodać kontrolkę Circ do szablonu okna dialogowego
Załaduj projekt kontenera kontrolek ActiveX. W tym przykładzie użyj projektu
Container
.Kliknij kartę Widok zasobów.
Otwórz folder Dialog .
Kliknij dwukrotnie szablon głównego okna dialogowego. W tym przykładzie użyj IDD_CONTAINER_DIALOG.
Kliknij ikonę kontrolki Circ w narzędziowniku.
Kliknij miejsce w oknie dialogowym, aby wstawić kontrolkę Circ.
W menu Plik wybierz pozycję Zapisz wszystko , aby zapisać wszystkie modyfikacje szablonu okna dialogowego.
Modyfikacje projektu
Aby umożliwić aplikacji Container uzyskiwanie dostępu do kontrolki Circ, program Visual C++ automatycznie dodaje plik implementacji klasy otoczki (.CPP) do projektu Container oraz plik nagłówkowy klasy otoczki (.H) do pliku nagłówka okna dialogowego.
#include "circ.h"
Nagłówek klasy opakowującej (.H)
Aby uzyskać i ustawić właściwości (i wywołać metody) dla kontrolki Circ, CCirc
klasa wrappera zawiera deklarację wszystkich udostępnionych metod i właściwości. W tym przykładzie te deklaracje znajdują się w pliku CIRC.H. Poniższy przykład to część klasy CCirc
, która definiuje uwidocznione interfejsy kontrolki 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);
}
};
Te funkcje można następnie wywoływać z innych procedur aplikacji przy użyciu normalnej składni języka C++. Aby uzyskać więcej informacji na temat używania tego zestawu funkcji składowej w celu uzyskania dostępu do metod i właściwości kontrolki, zobacz sekcję Programowanie kontrolki ActiveX.
Modyfikacje zmiennych składowych w projekcie
Po dodaniu kontrolki ActiveX do projektu i osadzonej w kontenerze okna dialogowego można uzyskać do niego dostęp przez inne części projektu. Najprostszym sposobem uzyskania dostępu do kontrolki jest utworzenie zmiennej składowej klasy CContainerDlg
okna dialogowego (krok 2), która jest tego samego typu co klasa otoki dodana do projektu przez program Visual C++. Następnie możesz użyć zmiennej składowej, aby uzyskać dostęp do osadzonej kontrolki w dowolnym momencie.
Gdy okno dialogowe Dodawanie zmiennej składowej dodaje do projektu zmienną składową m_circctl , dodaje również następujące wiersze do pliku nagłówka (. H) 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;
};
Ponadto wywołanie DDX_Control jest automatycznie dodawane do implementacji CContainerDlg
DoDataExchange
:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Programowanie kontrolki ActiveX
W tym momencie wstawiono kontrolkę ActiveX do szablonu okna dialogowego i utworzono dla niej zmienną składową. Teraz możesz użyć typowej składni języka C++, aby uzyskać dostęp do właściwości i metod osadzonej kontrolki.
Jak wspomniano (w nagłówku pliku klasy opakowania (.H)), plik nagłówka (.H) dla CCirc
klasy opakowania, w tym przypadku CIRC.H, zawiera listę funkcji składowych, których można użyć do pobierania i ustawiania dowolnej uwidocznionej właściwości. Dostępne są również funkcje składowe dla uwidocznionych metod.
Typowym miejscem modyfikowania właściwości kontrolki jest funkcja składowa OnInitDialog
głównej klasy dialogowej. Ta funkcja jest wywoływana tuż przed wyświetleniem okna dialogowego i służy do inicjowania jego zawartości, w tym dowolnej z jego kontrolek.
W poniższym przykładzie kodu użyto zmiennej członkowskiej m_circctl, aby zmodyfikować właściwości Caption i CircleShape kontrolki osadzonej 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
}