MFC ActiveX 控件:高级属性实现

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

重要

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

只读和只写属性

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

实现只读或只写属性

  1. 加载控件的项目。

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

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

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

    这会打开添加属性向导

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

  6. 对于“实现类型”,请单击“Get/Set 方法”

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

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

  9. 单击“完成” 。

当执行此操作时,添加属性向导会在调度映射条目中插入函数 SetNotSupportedGetNotSupported,以代替普通 Set 函数或 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();
   }
}

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

从属性返回错误代码

若要指示在尝试获取或设置属性时发生错误,请使用 COleControl::ThrowError 函数,该函数采用 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 类