MFC ActiveX 控件:使用在 ActiveX 控件的图片
本文介绍常见图片类型以及如何实现其在您的 Activex 控件。主题包括:
自定义图片属性概述
实现在您的 Activex 控件的自定义图片属性
对控件项目中添加
自定义图片属性概述
图片类型是类型的一组共有一些 Activex 控件。图片类型句柄图元文件、位图、图标和允许用户指定在 Activex 控件中显示的图片。自定义图片属性实现使用图片对象并获取/允许到照片属性的控件用户访问的设置。使用常用图片属性页,控件用户访问自定义图片属性。
除了标准图片类型外,字体和颜色类型也可用。有关使用标准字体的更多信息输入您的 Activex 控件,请参见一 MFC Activex 控件:使用字体文章。
Activex 控件类提供可用于实现在控件内图片属性的几个组件。这些组件包括:
-
此类提供方便地访问图片对象和函数进行自定义图片属性显示的项。
为类型支持 LPPICTUREDISP属性,实现与 get/set 功能。
使用类视图可以快速添加自定义属性或者,支持图片类型。有关添加 Activex 控件属性的更多信息具有类视图,请参见中的文章 MFC Activex 控件:属性。
操作控件的图片属性或属性的属性页。
此属性页是常用属性页的一个组的一部分可用的 Activex 控件。有关 Activex 控件属性页的更多信息,请参见中的文章 MFC Activex 控件:使用常用属性页
实现在您的 Activex 控件的自定义图片属性
在完成本节中介绍的步骤,控件也可以显示其用户选择的图片。用户可以更改所显示的图片使用显示当前图片的属性页并具有使用户可以选择不同的图片 " 浏览 " 按钮。
自定义图片属性实现使用过程类似于实现其他属性中使用时,是的主要差异在于该自定义特性必须支持图片类型。因为必须将 Activex 控件绘制图片属性的项目,必须执行若干添加和修改到属性,则它可以完全实现之前。
若要实现自定义图片属性,必须执行以下操作:
将代码添加到您的控件项目。
必须添加标准图片属性页 ID、类型 CPictureHolder的数据成员和类型 LPPICTUREDISP 自定义属性的 get/set 实现的。
修改您的控件类的多个功能。
这些修改将使到您的 Activex 控件绘制负责的一些功能。
对控件项目中添加
若要添加属性调用标准图片属性页中,插入 ID 在 BEGIN_PROPPAGEIDS 宏后的以下行在控件实现文件 (.CPP):
PROPPAGEID(CLSID_CPicturePropPage)
您必须以还提高 BEGIN_PROPPAGEIDS 宏的计数参数。下面的行阐释了这一点:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
添加 CPictureHolder 数据成员添加到控件类,将以下代码行插入到控件类声明中受保护的部分下在控件头文件 (。H):
CPictureHolder m_pic;
将您的数据成员 m_pic名称并不是必需的;所有名称将足够了。
接下来,添加支持图片类型的自定义属性:
使用 " 添加属性向导 ",添加一个自定义图片属性
加载您的控件的项目中。
在 " 类视图 " 中,展开您的控件库节点。
右击您的控件 (库节点的第二个节点接口节点) 打开快捷菜单。
从快捷菜单中选择,以 添加 然后 添加属性。
在 属性名 框中,键入属性的名称。有关示例的目的, ControlPicture 用于此过程。
在 属性类型 框中,为属性类型选择 IPictureDisp* 。
为 Implementation Type,单击 Get/Set Methods。
类型唯一的名称。获取和设置的功能或接受默认名称。(在此示例中、默认名称 GetControlPicture 和 SetControlPicture 使用。)
单击**“完成”**。
添加属性向导将计划映射注释之间添加以下代码将放在控件标头 (。H) 文件:
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
另外,以下代码将放在控件实现 (.CPP) 文件的计划映射插入了一:
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
添加属性向导还将控件实现文件中的以下两个存根功能:
IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your dispatch handler code here
return NULL;
}
void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
说明 |
---|
您的控件类和函数名称可能与上面的示例不同。 |
对控件 project 修改
在进行后对控件的必要添加项目,需要修改将影响呈现您的 Activex 控件的一些功能。这些函数、 OnResetState、 OnDraw和 get/set 自定义图片属性的功能,位于控件实现文件。(在此示例中为控件类调用 CSampleCtrl的说明, CPictureHolder 数据成员调用 m_pic,并且,自定义图片属性名是 ControlPicture。)
在控件 OnResetState 功能,请在调用之后添加下列选项行。 COleControl::OnResetState:
m_pic.CreateEmpty();
这将控件的图片到一个空白照片。
若要正确地绘制图片,中调用在控件 OnDraw 功能的 CPictureHolder::Render 。修改您的功能类似于以下示例:
void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
if (!pdc)
return;
m_pic.Render(pdc, rcBounds, rcBounds);
}
在控件的自定义图片属性获取函数中,添加下面的行:
return m_pic.GetPictureDispatch();
在控件的自定义图片属性设置的函数中,添加下面的行:
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
必须使图片属性不可变,以便信息在设计时添加将显示在运行时。将下行添加到 COleControl派生类的 DoPropExchange 功能:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
说明 |
---|
您的类和函数名称可能与上面的示例不同。 |
在修改完后,重新生成您的项目包含自定义图片属性的新功能,并使用测试容器新属性。有关如何访问测试容器的信息,请参见用测试容器测试属性和事件。