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


Контейнеры элементов управления ActiveX: использование элементов управления в контейнере, отличном от диалогового окна

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

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

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

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

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

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