本文介绍与在 ActiveX 控件中实现高级属性相关的主题。
重要
ActiveX 是一项不推荐用于新开发的旧技术。 有关取代 ActiveX 的新式技术的详细信息,请参阅 ActiveX 控件。
Read-Only 和 Write-Only 属性
“添加属性向导”提供了一种快速而简单的方法来实现控件的只读或仅写属性。
实现只读或只写属性
加载控件的项目。
在类视图中,展开控件的库节点。
右键单击控件(库节点的第二个节点)的接口节点以打开快捷菜单。
在快捷菜单中,单击“ 添加 ”,然后单击“ 添加属性”。
这将打开 “添加属性向导”。
在 “属性名称 ”框中,键入属性的名称。
对于 实现类型,请单击 “获取/设置方法”。
在 “属性类型” 框中,选择属性的正确类型。
如果需要只读属性,请清除 Set 函数名称。 如果需要仅写属性,请清除 Get 函数名称。
单击“完成”。
执行此作时,“添加属性向导”将插入函数 SetNotSupported
或 GetNotSupported
调度映射条目,代替普通集或 Get 函数。
如果要将现有属性更改为只读或只写,可以手动编辑调度映射,并从控件类中删除不必要的 Set 或 Get 函数。
如果希望属性是有条件的只读或只写(例如,仅当控件在特定模式下运行时),则可以按正常方式提供 Set 或 Get 函数,并在适当情况下调用 SetNotSupported
或 GetNotSupported
函数。 例如:
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();
}
}
如果数据成员为 TRUE,m_bReadOnlyMode
则此代码示例将调用SetNotSupported
。 如果 为 FALSE,则属性设置为新值。
从属性返回错误代码
若要指示尝试获取或设置属性时出错,请使用该 COleControl::ThrowError
函数,该函数采用 SCODE(状态代码)作为参数。 可以使用预定义的 SCODE 或定义自己的 SCODE。 有关预定义的 SCODE 列表和定义自定义 SCODE 的说明,请参阅 ActiveX 控件中的 ActiveX 控件中的“处理错误 ”一文:高级主题。
最常见的预定义 SCODE 存在帮助程序函数,例如 COleControl::SetNotSupported、 COleControl::GetNotSupported 和 COleControl::SetNotPermitted。
注释
ThrowError
仅用于从属性的 Get 或 Set 函数或自动化方法中返回错误的方法。 这些是堆栈上存在适当异常处理程序的唯一时间。
有关在代码的其他区域中报告异常的详细信息,请参阅“ActiveX 控件:高级主题”一文中的 COleControl::FireError 和 “处理 ActiveX 控件中的错误 ”部分。
另请参阅
MFC ActiveX 控件
MFC ActiveX 控件:属性
MFC ActiveX 控件:方法
COleControl 类