ActiveX 控件容器:使用在非对话框容器的控件
在某些应用程序,例如 SDI 或 MDI 应用程序,您可以在应用程序的窗口将若要嵌入控件。 包装类的 创建 成员函数,插入 Visual C++,可动态创建控件的实例中,在中,而无需进行对话框。
创建 成员函数具有以下参数:
lpszWindowName
对于控件上的文本或 description 属性将显示文本的指针 (如果有)。dwStyle
窗口样式。 有关完整的列表,请参见 CWnd::CreateControl。rect
指定控件的大小和位置。pParentWnd
指定控件的父窗口,通常 CDialog。 不能为 NULL。nID
指定控件 ID,并且可以由容器使用引用该控件。
一个使用此函数动态创建 Activex 控件在 SDI 应用程序的窗体视图。 可以在应用程序的 WM_CREATE 处理程序可以创建控件的实例。
对于此示例, CMyView 是主视图类, CCirc 是包装类,并且, CIRC.H 为标头 (。H) 包装类的文件。
实现此功能四个步骤的过程。
动态创建 Activex 控件在非对话框窗口。
在 CMYVIEW.H 的插入 CIRC.H,在 CMyView 类定义之前:
#include "circ.h"
添加一个成员变量 (类型 CCirc) 到位于 CMYVIEW.H 的 CMyView 类定义的受保护的部分:
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 控件将动态创建的,无论应用程序的视图创建。