MFC ActiveX 控件:高级属性实现

本文介绍与在 ActiveX 控件中实现高级属性相关的主题。

重要

ActiveX 是一项不推荐用于新开发的旧技术。 有关取代 ActiveX 的新式技术的详细信息,请参阅 ActiveX 控件

Read-Only 和 Write-Only 属性

“添加属性向导”提供了一种快速而简单的方法来实现控件的只读或仅写属性。

实现只读或只写属性

  1. 加载控件的项目。

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

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

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

    这将打开 “添加属性向导”。

  5. “属性名称 ”框中,键入属性的名称。

  6. 对于 实现类型,请单击 “获取/设置方法”。

  7. “属性类型” 框中,选择属性的正确类型。

  8. 如果需要只读属性,请清除 Set 函数名称。 如果需要仅写属性,请清除 Get 函数名称。

  9. 单击“完成”。

执行此作时,“添加属性向导”将插入函数 SetNotSupportedGetNotSupported 调度映射条目,代替普通集或 Get 函数。

如果要将现有属性更改为只读或只写,可以手动编辑调度映射,并从控件类中删除不必要的 Set 或 Get 函数。

如果希望属性是有条件的只读或只写(例如,仅当控件在特定模式下运行时),则可以按正常方式提供 Set 或 Get 函数,并在适当情况下调用 SetNotSupportedGetNotSupported 函数。 例如:

void CMyAxUICtrl::SetMyProperty(SHORT newVal)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   if (m_bReadOnlyMode)   //  some control-specific state
   {
      SetNotSupported();
   }
   else
   {
      m_iPropVal = newVal;   //  set property as normal
      SetModifiedFlag();
   }
}

如果数据成员为 TRUEm_bReadOnlyMode则此代码示例将调用SetNotSupported。 如果 为 FALSE,则属性设置为新值。

从属性返回错误代码

若要指示尝试获取或设置属性时出错,请使用该 COleControl::ThrowError 函数,该函数采用 SCODE(状态代码)作为参数。 可以使用预定义的 SCODE 或定义自己的 SCODE。 有关预定义的 SCODE 列表和定义自定义 SCODE 的说明,请参阅 ActiveX 控件中的 ActiveX 控件中的“处理错误 ”一文:高级主题。

最常见的预定义 SCODE 存在帮助程序函数,例如 COleControl::SetNotSupportedCOleControl::GetNotSupportedCOleControl::SetNotPermitted

注释

ThrowError 仅用于从属性的 Get 或 Set 函数或自动化方法中返回错误的方法。 这些是堆栈上存在适当异常处理程序的唯一时间。

有关在代码的其他区域中报告异常的详细信息,请参阅“ActiveX 控件:高级主题”一文中的 COleControl::FireError“处理 ActiveX 控件中的错误 ”部分。

另请参阅

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