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 控件

  1. 在 CMYVIEW.H 中插入 CIRC.H 并刚好放置在 CMyView 类定义的前面:

    #include "circ.h"
    
  2. 将一个成员变量(类型为 CCirc)添加到 CMYVIEW.H 中的 CMyView 类定义的受保护部分:

    class CMyView : public CView
    {
    
    protected:
    CCirc m_myCtl;
    
    public:
    afx_msg void OnViewCircdlg();
    }
    ;
    
  3. WM_CREATE 消息处理程序添加到 CMyView 类中。

  4. 在处理程序函数 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;
    }
    
  5. 重新生成项目。 每当创建应用程序的视图时,都会动态创建一个 Circ 控件。

另请参阅

ActiveX 控件容器