ActiveX 控件容器:在 ActiveX 控件容器的编程 ActiveX 控件

本文介绍访问的公开嵌入 Activex 控件 方法属性 处理。 基本上,您将执行以下步骤:

  1. 使用库的将 Activex 控件插入 ActiveX 容器项目中

  2. 定义一个成员变量 (或访问的其他窗体的类型) 和 Activex 控件包装类同名。

  3. 使用包装类中的预定义的成员函数的程序 Activex 控件 。

对于本讨论中,假定您使用 Activex 控件创建了一个基于对话框的项目 (名为 Container) 的支持。 Circ 示例控件, Circ,将添加到该生成的项目。

对于 Circ 控件插入到项目 (第 1 步),插入 Circ 控件的实例添加到应用程序的主对话框。

过程

添加 Circ 控件添加到对话框模板

  1. 加载 Activex 控件容器项目。 对于此示例,请使用 Container 项目。

  2. 单击“资源视图”选项卡。

  3. 打开 对话框 文件夹。

  4. 双击主对话框模板。 对于此示例,请使用 IDD_CONTAINER_DIALOG

  5. 单击 Circ 控件图标在工具箱中。

  6. 单击对话框中的一个位置插入 Circ 控件。

  7. 文件 菜单中,选择 全部保存 保存到对话框模板的所有修改。

对 project 修改

若要启用容器应用程序访问 Circ 控件, Visual C++ 会自动将包装类 (CCirc) 实现文件 (.CPP) 到容器项目和包装类头 (。H) 的对话框头文件的文件:

#include "circ.h"

包装类头 (。H) 文件

获取和设置的属性 (并调用方法) Circ 控件, CCirc 包装类提供所有公开的方法和属性的说明。 在此示例中,这些声明在 CIRC.H. 中。 下面的示例是定义 Activex 控件的公开的接口类 CCirc 的部分:

class CCirc : public CWnd
{


...


// Functions
//

   void AboutBox()
   {
      InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
   }

// Properties
//

   unsigned long GetBackColor()
   {
      unsigned long result;
      GetProperty(DISPID_BACKCOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetBackColor(unsigned long propVal)
   {
      SetProperty(DISPID_BACKCOLOR, VT_UI4, propVal);
   }
   signed char GetCircleShape()
   {
      signed char result;
      GetProperty(0x1, VT_I1, (void*)&result);
      return result;
   }
   void SetCircleShape(signed char propVal)
   {
      SetProperty(0x1, VT_I1, propVal);
   }
   short GetCircleOffset()
   {
      short result;
      GetProperty(0x3, VT_I2, (void*)&result);
      return result;
   }
   void SetCircleOffset(short propVal)
   {
      SetProperty(0x3, VT_I2, propVal);
   }
   CString GetCaption()
   {
      CString result;
      GetProperty(DISPID_CAPTION, VT_BSTR, (void*)&result);
      return result;
   }
   void SetCaption(CString propVal)
   {
      SetProperty(DISPID_CAPTION, VT_BSTR, propVal);
   }
   COleFont GetFont()
   {
      LPDISPATCH result;
      GetProperty(DISPID_FONT, VT_DISPATCH, (void*)&result);
      return COleFont(result);
   }
   void SetFont(LPDISPATCH propVal)
   {
      SetProperty(DISPID_FONT, VT_DISPATCH, propVal);
   }
   unsigned long GetForeColor()
   {
      unsigned long result;
      GetProperty(DISPID_FORECOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetForeColor(unsigned long propVal)
   {
      SetProperty(DISPID_FORECOLOR, VT_UI4, propVal);
   }
   CString GetNote()
   {
      CString result;
      GetProperty(0x4, VT_BSTR, (void*)&result);
      return result;
   }
   void SetNote(CString propVal)
   {
      SetProperty(0x4, VT_BSTR, propVal);
   }
   unsigned long GetFlashColor()
   {
      unsigned long result;
      GetProperty(0x2, VT_UI4, (void*)&result);
      return result;
   }
   void SetFlashColor(unsigned long propVal)
   {
      SetProperty(0x2, VT_UI4, propVal);
   }
};

使用常规 C++ 语法,这些功能可以从其他应用程序中然后调用。 有关使用该成员函数的更多信息用于访问控件方法和属性,请参见一节 编程 Activex 控件。

对项目的成员变量的修改

对于 Activex 控件在对话框中容器已添加到项目中嵌入的,它可能由该项目的其他部分变。 访问的最简单的方法控件是到对话框类的 创建一个成员变量 , CContainerDlg (第 2 步),与包装类同名添加到项目由 Visual C++。 您可以随时然后使用成员变量来访问该嵌入式控件。

Add Member Variable 对话框添加 m_circctl 成员变量添加到项目时,还将以下行添加到头文件 (。 CContainerDlg 类的 H):

class CContainerDlg : public CDialog
{
   DECLARE_DYNAMIC(CContainerDlg)

public:
   CContainerDlg(CWnd* pParent = NULL);   // standard constructor
   virtual ~CContainerDlg();

   virtual void OnFinalRelease();

// Dialog Data
   enum { IDD = IDD_CONTAINER_DIALOG };

protected:
   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

   DECLARE_MESSAGE_MAP()
   DECLARE_DISPATCH_MAP()
   DECLARE_INTERFACE_MAP()
public:
   CCirc m_circctl;


...


};

此外,对于 DDX_Control 的调用会自动添加到 DoDataExchange的 entity_CODECContainerDlg 的实现:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

编程 Activex 控件

此时,您已插入 Activex 控件添加到您的对话框模板并创建了它的成员变量。 现在可以使用常规 C++ 语法来访问该嵌入式控件的属性和方法。

作为批注 (在 包装类头 (。H) 文件),头文件 (。 CCirc 包装类的 H),在 CIRC.H,包含的成员函数列出了可用于获取和设置所有公开的属性值。 公开的方法的成员函数也可用。

修改控件的属性的一个常见在主对话框类的 OnInitDialog 成员函数。 调用该函数时,在对话框中显示和使用初始化其内容之前,包括其任何控件。

下面的代码示例使用 m_circctl 成员变量来修改嵌入 Circ 控件的声明和 CircleShape 属性:

BOOL CContainerDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_circctl.SetCaption(_T("Circ 2 Control"));
   if(!m_circctl.GetCircleShape())
      m_circctl.SetCircleShape(TRUE);

   return TRUE;  // return TRUE unless you set the focus to a control
}

请参见

概念

ActiveX 控件容器