ActiveX 控件容器:在 ActiveX 控件容器的编程 ActiveX 控件
本文介绍访问的公开嵌入 Activex 控件 方法 和 属性 处理。 基本上,您将执行以下步骤:
定义一个成员变量 (或访问的其他窗体的类型) 和 Activex 控件包装类同名。
使用包装类中的预定义的成员函数的程序 Activex 控件 。
对于本讨论中,假定您使用 Activex 控件创建了一个基于对话框的项目 (名为 Container) 的支持。 Circ 示例控件, Circ,将添加到该生成的项目。
对于 Circ 控件插入到项目 (第 1 步),插入 Circ 控件的实例添加到应用程序的主对话框。
过程
添加 Circ 控件添加到对话框模板
加载 Activex 控件容器项目。 对于此示例,请使用 Container 项目。
单击“资源视图”选项卡。
打开 对话框 文件夹。
双击主对话框模板。 对于此示例,请使用 IDD_CONTAINER_DIALOG。
单击 Circ 控件图标在工具箱中。
单击对话框中的一个位置插入 Circ 控件。
从 文件 菜单中,选择 全部保存 保存到对话框模板的所有修改。
对 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
}