Контейнеры элементов управления ActiveX. Программирование элементов управления ActiveX в контейнере элементов управления ActiveX

В этой статье описывается процесс доступа к предоставляемым методам и свойствам внедренных элементов ActiveX.

Важно!

ActiveX — это устаревшая технология, которую не следует использовать для новых разработок. Дополнительные сведения о современных технологиях, которые заменяют ActiveX, см. в разделе Элементы ActiveX.

В основном вы выполните следующие действия.

  1. Вставьте элемент управления ActiveX в проект контейнера ActiveX с помощью коллекции.

  2. Определите переменную-член (или другую форму доступа) того же типа, что и класс оболочки элемента ActiveX.

  3. Программа элемента ActiveX с помощью предопределенных функций-членов класса-оболочки.

Для этого обсуждения предположим, что вы создали проект на основе диалогов (именованный контейнер) с поддержкой элементов управления ActiveX. Элемент управления Circ sample, Circ, будет добавлен в полученный проект.

После вставки элемента управления Circ в проект (шаг 1) вставьте экземпляр элемента управления Circ в главное диалоговое окно приложения.

Процедуры

Добавление элемента управления Circ в шаблон диалогового окна

  1. Загрузите проект контейнера элементов управления ActiveX. В этом примере используйте Container проект.

  2. Перейдите на вкладку "Представление ресурсов".

  3. Откройте папку диалогового окна .

  4. Дважды щелкните шаблон главного диалогового окна. В этом примере используйте IDD_CONTAINER_DIALOG.

  5. Щелкните значок элемента управления Circ на панели элементов.

  6. Щелкните место в диалоговом окне, чтобы вставить элемент управления Circ.

  7. В меню "Файл" выберите "Сохранить все ", чтобы сохранить все изменения в шаблоне диалогового окна.

Изменения проекта

Чтобы разрешить приложению-контейнеру доступ к элементу управления 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
}

См. также

Контейнеры для элементов ActiveX