Контейнеры элементов управления 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 в окне, отличном от диалогового окна
Вставка CIRC. H в CMYVIEW. H, непосредственно перед определением
CMyView
класса:#include "circ.h"
Добавьте переменную-член (типа
CCirc
) в защищенный разделCMyView
определения класса, расположенного в CMYVIEW. H:class CMyView : public CView {
protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); } ;
WM_CREATE
Добавьте обработчик сообщений в классCMyView
.В функции обработчика вызовите функцию
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; }
Выполните повторную сборку проекта. Элемент управления Circ будет создаваться динамически при создании представления приложения.