在某些应用程序(如 SDI 或 MDI 应用程序)中,需要将控件嵌入应用程序窗口。 由 Visual C++ 插入的包装类的 Create 成员函数可以动态创建控件的实例,而无需对话框。
Create 成员函数具有以下参数:
lpszWindowName
指向要显示在控件的 Text 或 Caption 属性中的文本的指针(如果有)。
dwStyle
窗口样式。 有关完整列表,请参阅 CWnd::CreateControl。
rect
指定控件的大小和位置。
pParentWnd
指定控件的父窗口,通常是一个 CDialog
。 它不得为 NULL。
nID
指定控件 ID,可由容器用来引用控件。
使用此函数动态创建 ActiveX 控件的一个示例是 SDI 应用程序的窗体视图。 然后,可以在应用程序的处理程序中创建 WM_CREATE
控件的实例。
对于此示例, CMyView
是主视图类, CCirc
是包装类,也是 CIRC。H 是标头 (.包装类的 H) 文件。
实现此功能是一个四步过程。
在非对话窗口中动态创建 ActiveX 控件
插入 CIRC。CMYVIEW 中的 H。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
使用this
指针作为父窗口调用控件的Create
函数: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 控件。