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. 插入 CIRC。CMYVIEW 中的 H。H,就在类定义之前 CMyView

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

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

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