前段时间学习了如何在CAD特性面板(OPM)中显示自定义实体属性,在完成上述功能后,发现原来以中文显示的属性名全部变成了英文,要将显示的属性名改成中文,必须重载IOPMPropertyExtension::GetDisplayName函数。但使用该函数必须要知道CAD内置属性名的DISPID,搜遍整个SDK和全球网页也没找到对应属性的DISPID,最后在一个不知道是哪国的论坛中有一段似乎是改变显示属性字名的代码,报着试试看的想法将其中的DISPID值带入自己的代码中,居然成功了!现发给大家分享。 以下是上述论坛的链接: //定义自定义实体属性的DISPID #define DISPID_MyProperty1 0x01 //自定义属性1 #define DISPID_MyProperty2 0x02 //自定义属性2 //在.h文件中声明GetDisplayName函数 STDMETHOD(GetDisplayName)(/* [in] */ DISPID dispID, /* [out] */ BSTR* pbstr); //在.cpp文件中添加如下代码 STDMETHODIMP CMyProperty::GetDisplayName(DISPID dispID, BSTR* pbstr) { switch (dispID) { case (0x401): *pbstr = ::SysAllocString(_T("自定义实体名称")); break; case (0x516): *pbstr = ::SysAllocString(_T("颜色")); break; case (0x501): *pbstr = ::SysAllocString(_T("图层")); break; case (0x502): *pbstr = ::SysAllocString(_T("线型")); break; case (0x503): *pbstr = ::SysAllocString(_T("线型比例")); break; case (0x513): *pbstr = ::SysAllocString(_T("打印样式")); break; case (0x514): *pbstr = ::SysAllocString(_T("线宽")); break; case (0x515): *pbstr = ::SysAllocString(_T("超链接")); break; case (0x577): *pbstr = ::SysAllocString(_T("材质")); break; case (0x01): *pbstr = ::SysAllocString(_T("自定义属性1")); break; case (0x02): *pbstr = ::SysAllocString(_T("自定义属性2")); break; default: return AcOpmGetDisplayName(reinterpret_cast<IUnknown*>(this), GetResourceInstance(), GetOPMPropertyMap(), dispID, pbstr); //默认返回CAD字符串 } return S_OK; } |