Контейнеры элементов управления ActiveX. Программирование элементов управления ActiveX в контейнере элементов управления ActiveX
В этой статье описывается процесс доступа к предоставляемым методам и свойствам внедренных элементов ActiveX.
Важно!
ActiveX — это устаревшая технология, которую не следует использовать для новых разработок. Дополнительные сведения о современных технологиях, которые заменяют ActiveX, см. в разделе Элементы ActiveX.
В основном вы выполните следующие действия.
Вставьте элемент управления ActiveX в проект контейнера ActiveX с помощью коллекции.
Определите переменную-член (или другую форму доступа) того же типа, что и класс оболочки элемента ActiveX.
Программа элемента ActiveX с помощью предопределенных функций-членов класса-оболочки.
Для этого обсуждения предположим, что вы создали проект на основе диалогов (именованный контейнер) с поддержкой элементов управления ActiveX. Элемент управления Circ sample, Circ, будет добавлен в полученный проект.
После вставки элемента управления Circ в проект (шаг 1) вставьте экземпляр элемента управления Circ в главное диалоговое окно приложения.
Процедуры
Добавление элемента управления Circ в шаблон диалогового окна
Загрузите проект контейнера элементов управления ActiveX. В этом примере используйте
Container
проект.Перейдите на вкладку "Представление ресурсов".
Откройте папку диалогового окна .
Дважды щелкните шаблон главного диалогового окна. В этом примере используйте IDD_CONTAINER_DIALOG.
Щелкните значок элемента управления Circ на панели элементов.
Щелкните место в диалоговом окне, чтобы вставить элемент управления Circ.
В меню "Файл" выберите "Сохранить все ", чтобы сохранить все изменения в шаблоне диалогового окна.
Изменения проекта
Чтобы разрешить приложению-контейнеру доступ к элементу управления Circ, Visual C++ автоматически добавляет файл реализации класса оболочки (CCirc
). CPP) в проект контейнера и заголовок класса-оболочки (). H) в файл заголовка диалогового окна:
#include "circ.h"
Заголовок класса-оболочки (). H) Файл
Чтобы получить и задать свойства (и вызвать методы) для элемента управления Circ, CCirc
класс-оболочка предоставляет объявление всех доступных методов и свойств. В примере эти объявления находятся в CIRC.H. Следующий пример — это часть класса CCirc
, которая определяет предоставляемые интерфейсы элемента управления 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);
}
};
Затем эти функции можно вызывать из других процедур приложения с помощью обычного синтаксиса C++. Дополнительные сведения об использовании этой функции-члена для доступа к методам и свойствам элемента управления см. в разделе "Программирование элемента ActiveX".
Изменения переменных членов в проекте
После добавления элемента ActiveX в проект и внедрения в контейнер диалогового окна он может быть доступ к другим частям проекта. Самый простой способ получить доступ к элементу управления — создать переменную члена класса CContainerDlg
диалогового окна (шаг 2), которая имеет тот же тип, что и класс оболочки, добавленный в проект Visual C++. Затем можно использовать переменную-член для доступа к встроенному элементу управления в любое время.
Когда диалоговое окно "Добавить переменную члена" добавляет переменную члена m_circctl в проект, она также добавляет следующие строки в файл заголовка (). H) 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;
};
Кроме того, вызов DDX_Control автоматически добавляется в CContainerDlg
реализацию DoDataExchange
:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Программирование элемента управления ActiveX
На этом этапе вы вставляете элемент activeX в шаблон диалогового окна и создали для него переменную-член. Теперь можно использовать распространенный синтаксис C++ для доступа к свойствам и методам внедренного элемента управления.
Как отмечалось (в заголовке класса-оболочке (). H) Файл), файл заголовка (. H) для CCirc
класса-оболочки в данном случае CIRC. H содержит список функций-членов, которые можно использовать для получения и задания любого значения доступного свойства. Функции-члены для предоставляемых методов также доступны.
Обычно изменение свойств элемента управления находится в OnInitDialog
функции-члене основного класса диалогов. Эта функция вызывается непосредственно перед появлением диалогового окна и используется для инициализации его содержимого, включая любой из его элементов управления.
В следующем примере кода используется переменная члена m_circctl для изменения свойств Caption и CircleShape внедренного элемента управления 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
}