Контейнеры элемент управления 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++.Дополнительные сведения об использовании этого функции-члена задайте для доступа к методам и свойствам элемента управления см. раздел Программирование элементов управления 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 автоматически добавляется к реализации entity_CODECContainerDlg DoDataExchange:
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
}