Контейнеры элементов управления ActiveX. Использование элементов управления в контейнере без диалоговых окон
В некоторых приложениях, например SDI или MDI, может возникнуть необходимость внедрения элемента управления в окне приложения. Функцию-член Создать класс-оболочки, введенный Visual C++, может создать экземпляр элемента управления динамически, без необходимости использования диалогового окна.
Функцию-член Создать имеет следующие параметры:
lpszWindowName
Указатель на текст, отображаемый в свойстве текста или заголовка элемента управления (если есть).dwStyle
Стили Windows. Полный список см. в разделе CWnd::CreateControl.rect
Определяет размер и положение элемента управления.pParentWnd
Задает родительское окно элемента управления, обычно CDialog. Это не должно иметь значение NULL.nID
Указывает идентификатор элемента управления и может быть использовано контейнером для ссылки на элемент управления.
Примером использования этой функции для динамического создания элементов управления ActiveX был бы в представлении формы в приложении SDI. Затем можно создать экземпляр элемента управления в обработчике WM_CREATE приложения.
Для этого примера CMyView главный класс представления, CCirc класс-оболочка, и CIRC.H заголовок (. Файл класс-оболочки H).
Реализация этой функции 4 — двухступенчатый процесс.
Динамическое создание элемента управления 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 создается динамически при создании представления приложения.