Поделиться через


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

Этот раздел описывает процесс для получения предоставляется методы и свойства внедренных элементов управления ActiveX. По существу, необходимо выполнить следующие действия.

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

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

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

Для данного обсуждения предположим, что создан проект на основе диалоговых окон () с поддержкой именованный Контейнер элементов управления ActiveX. Управление примера CIRC, 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 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
}

См. также

Основные понятия

Контейнеры для элементов управления ActiveX