MFC ActiveX 控件:添加常用属性

常用属性与自定义属性的区别是,它们已通过类 COleControl 实现。 COleControl 包含支持控件的常见属性的预定义成员函数。 一些常见属性包括控件的描述文字以及前景色和背景色。 若要了解其他常用属性,请参阅本文稍后的添加属性向导支持的常用属性。 常用属性的调度映射条目始终采用 DISP_STOCKPROP 前缀。

本文介绍如何使用添加属性向导将常用属性(在本例中是描述文字)添加到 ActiveX 控件,并阐释了这导致的代码修改。 主题包括:

使用添加属性向导来添加常用属性

添加常用属性所需的代码比添加自定义属性的少,因为对属性的支持会由 COleControl 自动处理。 以下过程演示了如何将常用的 Caption 属性添加到 ActiveX 控件框架,它还可用于添加其他常用属性。 将所选常用属性名称替换为 Caption。

若要使用添加属性向导添加常用的 Caption 属性

  1. 加载控件的项目。

  2. 在“类视图”中,展开控件的库节点。

  3. 右键单击控件的接口节点(库节点的第二个节点)以打开快捷菜单。

  4. 从快捷菜单中,单击“添加”,然后单击“添加属性”。

    这会打开添加属性向导

  5. 在“属性名称”框中,单击“Caption”。

  6. 单击“完成” 。

针对常用属性的添加属性向导变更

COleControl 支持常用属性,因此添加属性向导不以任何方式更改类声明;它会将属性添加到调度映射中。 添加属性向导会将以下行添加到控件的调度映射中,它位于实现 (.CPP) 文件中:

DISP_STOCKPROP_CAPTION()

以下行会添加到控件的接口说明 (.IDL) 文件中:

[id(DISPID_CAPTION), helpstring("property Caption")] BSTR Caption;

该行为 Caption 属性指定一个特定 ID。 请注意,属性是可绑定的,将在修改值之前从数据库请求权限。

这使 Caption 属性可供控件的用户使用。 若要使用常用属性的值,请访问 COleControl 基类的成员变量或成员函数。 若要详细了解这些成员变量和成员函数,请参阅下一部分:添加属性向导支持的常用属性。

添加属性向导支持的常用属性

COleControl 类提供 9 个常用属性。 可使用添加属性向导添加所需的属性。

属性 调度映射条目 如何访问值
Appearance DISP_STOCKPROP_APPEARANCE( ) 可以 m_sAppearance 的形式访问值。
BackColor DISP_STOCKPROP_BACKCOLOR( ) 可通过调用 GetBackColor 访问值。
BorderStyle DISP_STOCKPROP_BORDERSTYLE( ) 可以 m_sBorderStyle 的形式访问值。
Caption DISP_STOCKPROP_CAPTION( ) 可通过调用 InternalGetText 访问值。
Enabled DISP_STOCKPROP_ENABLED( ) 可以 m_bEnabled 的形式访问值。
Font DISP_STOCKPROP_FONT( ) 如需了解用法,请参阅 MFC ActiveX 控件:使用字体一文。
ForeColor DISP_STOCKPROP_FORECOLOR( ) 可通过调用 GetForeColor 访问值。
hWnd DISP_STOCKPROP_HWND( ) 可以 m_hWnd 的形式访问值。
Text DISP_STOCKPROP_TEXT( ) 可通过调用 InternalGetText 访问值。 此属性与 Caption 相同,只是属性名称不同。
ReadyState DISP_STOCKPROP_READYSTATE() 可以 m_lReadyStateGetReadyState 的形式访问值

常用属性和通知

大多数常用属性都有可重写的通知函数。 例如,无论何时更改 BackColor 属性,都会调用 OnBackColorChanged 函数(控件类的成员函数)。 默认实现(在 COleControl 中)会调用 InvalidateControl。 如果要采取其他操作来应对这种情况,请重写此函数。

颜色属性

绘制控件时,可使用常用的 ForeColorBackColor 属性,也可使用你自己的自定义颜色属性。 若要使用颜色属性,请调用 COleControl::TranslateColor 成员函数。 此函数的参数是颜色属性的值和可选的调色板句柄。 返回值是可传递到 GDI 函数(例如 SetTextColorCreateSolidBrush)的 COLORREF 值。

可分别调用 GetForeColorGetBackColor 函数访问常用的 ForeColorBackColor 属性的颜色值。

下面的示例演示如何在绘制控件时使用这两个颜色属性。 它会初始化一个临时 COLORREF 变量和一个 CBrush 对象,调用 TranslateColor:一个使用 ForeColor 属性,另一个使用 BackColor 属性。 然后,使用临时 CBrush 对象来绘制控件的矩形,使用 ForeColor 属性设置文本颜色。

CBrush bkBrush(TranslateColor(GetBackColor()));
COLORREF clrFore = TranslateColor(GetForeColor());
pdc->FillRect(rcBounds, &bkBrush);
pdc->SetTextColor(clrFore);
pdc->DrawText(InternalGetText(), -1, rcBounds, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

另请参阅

MFC ActiveX 控件
MFC ActiveX 控件:属性
MFC ActiveX 控件:方法
COleControl 类