Контейнеры элементов управления ActiveX. Программирование элементов управления ActiveX в контейнере элементов управления ActiveX
Этот раздел описывает процесс для получения предоставляется методы и свойства внедренных элементов управления ActiveX. По существу, необходимо выполнить следующие действия.
Вставьте элемент управления ActiveX в проект контейнера ActiveX использование коллекции.
Определение переменной-члена (или другую форму доступа) того же введите как класс-оболочка элемента управления ActiveX.
Программа элемент управления ActiveX использование предопределенных функции-члены класс-оболочки.
Для данного обсуждения предположим, что создан проект на основе диалоговых окон () с поддержкой именованный Контейнер элементов управления ActiveX. Управление примера CIRC, 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 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 автоматически добавляется к реализации CContainerDlgDoDataExchange:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Программирование элементов управления ActiveX
На этом этапе, вставленной элемент управления ActiveX в шаблон диалоговых окон и создания переменную-член для него. Теперь можно использовать синтаксис C++ для общего доступа к свойствам и методам внедренного элемента управления.
Как отмечалось в ( Заголовок класс-оболочки (. Файл H)), файл заголовка (. H) для класс-оболочки CCirc, в данном случае CIRC.H, содержит список функций-членов, которые можно использовать для получения и задания предоставляется любое значение свойства. Функции-члены для методов, предоставляемых также доступны.
Общее место для изменения свойств элемента управления в функции-члене OnInitDialog основного класса диалогового окна. Эта функция вызывается непосредственно перед вызовом диалогового окна, и используется для инициализации его содержимое, включая ее элементов управления.
В следующем примере кода используется переменной-члена m_circctl, изменять свойства заголовка и 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
}