ActiveX 控件容器:使用非对话框容器中的控件
在某些应用程序(如 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 控件
在 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
中,使用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 控件。