Контейнеры элементов управления ActiveX. Использование элементов управления в контейнере без диалоговых окон

В некоторых приложениях, таких как приложение SDI или MDI, необходимо внедрить элемент управления в окно приложения. Функция создания члена класса-оболочки, вставленная Visual C++, может динамически создавать экземпляр элемента управления без необходимости в диалоговом окне.

Функция create member имеет следующие параметры:

lpszWindowName
Указатель на текст, отображаемый в свойстве Text или Caption элемента управления (если таковой имеется).

dwStyle
Стили Windows. Полный список см. в разделе CWnd::CreateControl.

rect
Указывает размер и положение элемента управления.

pParentWnd
Указывает родительское окно элемента управления, как правило, .CDialog Он не должен иметь значение NULL.

Nid
Указывает идентификатор элемента управления и может использоваться контейнером для ссылки на элемент управления.

Один из примеров использования этой функции для динамического создания элемента управления ActiveX будет находиться в представлении формы приложения SDI. Затем можно создать экземпляр элемента управления в WM_CREATE обработчике приложения.

В этом примере CMyView является основным классом представления, CCirc является класс-оболочка и CIRC. H — это заголовок (. H) файл класса оболочки.

Реализация этой функции — это четырехэтапный процесс.

Динамическое создание элемента activeX в окне, отличном от диалогового окна

  1. Вставка CIRC. H в CMYVIEW. H, непосредственно перед определением CMyView класса:

    #include "circ.h"
    
  2. Добавьте переменную-член (типа CCirc) в защищенный раздел CMyView определения класса, расположенного в CMYVIEW. H:

    class CMyView : public CView
    {
    
    protected:
    CCirc m_myCtl;
    
    public:
    afx_msg void OnViewCircdlg();
    }
    ;
    
  3. WM_CREATE Добавьте обработчик сообщений в классCMyView.

  4. В функции обработчика вызовите функцию CMyView::OnCreateэлемента управления Create с помощью this указателя в качестве родительского окна:

    int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
       if (CView::OnCreate(lpCreateStruct) == -1)
          return -1;
    
       m_myCtl.Create(NULL, WS_VISIBLE, CRect(50, 50, 100, 100), this, 0);
       m_myCtl.SetCaption(_T("Control created"));
    
       return 0;
    }
    
  5. Выполните повторную сборку проекта. Элемент управления Circ будет создаваться динамически при создании представления приложения.

См. также

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