从属性扩展模板类派生
为了减少实现工作量,从接口派生 COM 包装类通常是有意义的。从此接口派生提供 、 和 接口的“样板”实现。使用通过宏提供的信息来实现这些接口。IOPMPropertyExtensionImplIOPMPropertyExtensionICategorizePropertiesIPerPropertyBrowsing IOPMPropertyExtensionImplOPMPROP_MAP
在 opmimp.h 文件中声明了以下宏:OPMPROP_MAP
-
BEGIN_OPMPROP_MAP
-
OPMPROP_ENTRY
-
OPMPROP_CAT_ENTRY
-
OPMPROP_DESC_ENTRY
-
OPMPROP_PREDEFINED_ENTRY
-
OPMPROP_ELEMENT_ENTRY
-
OPMPROP_PAGE
这些宏接受以下部分或全部参数:
- nDesID
-
属性的说明字符串 ID
- DPID的
-
该物业的DISPID
- CTID公司
-
属性的类别 ID,该 ID 在应用程序的字符串表资源中定义,由ICategorizeProperties::MapPropertyToCategory()
- ctNameID
-
属性的类别名称字符串
- 元素ID
-
展开的属性名称列表(分号分隔),由IOPMPropertyExpander::GetElementStrings()
这些字符串允许单个属性扩展为多个子属性。例如,轻量级折线的折点扩展为两个值:X 和 Y。在这种情况下,展开的属性名称列表将为“顶点 X;顶点 Y“。为可展开属性提供的字符串数应与参数中指定的数目匹配。grp
- predefID
-
属性的预定义字符串列表(分号分隔)的 ID,由IPerPropertyBrowsing::GetPredefinedStrings()
此列表指定单个属性的可能字符串值。这些字符串显示在下拉列表中。例如,如果此值引用的字符串为“Yes;“否”、“是”和“否”值显示在下拉列表中。用户只能从列表中选择一个。
- 瓦尔斯
-
属性的预定义值列表(分号分隔),由IPerPropertyBrowsing::GetPredefinedValues()
这些数值对应于预定义字符串列表中的每个字符串。例如,如果为“是;否“,此值为”1;0“,则”Yes“的值为 1,”No“的值为 0。在“属性”选项板中选择“是”或“否”时,COM 包装器的方法将分别接收值 1 或 0。predefIDput_xxx()
若要声明枚举属性控件,应设置为以分号分隔的字符串符号列表的 ID,并设置为分配给相应符号的值的分号分隔列表。以下示例使用字符串表资源 ID IDS_ENUMSTRINGS,该 ID 已设置为字符串“One;Two“在项目的字符串表中:predefIDvalspredefID
OPMPROP_ENTRY(IDS_EnumTest, 7, PROPCAT_Test,
IDS_CAT_NAME_Test, 0, IDS_ENUMSTRINGS,
_ACRX_T("1;2"), 0, 1, IID_NULL, IID_NULL, "")
当用户编辑枚举测试属性时,下拉列表将包含“One”和“Two”,它们会将属性分别设置为 1 或 2。
- 玻璃钢
-
展开属性名称分组中的元素数,由IOPMPropertyExpander::GetElementGrouping()
此数字应等于字符串列表中指定的字符串数。例如,对于 3D 点,此值为 3,因为单个点有 X、Y 和 Z 值。对于 2D 点,它是 2。elementsID
- 编辑
-
Show-property 覆盖,指定属性是可编辑的还是只读的
- 其他
-
CLSID 用于其他...组合项对话框(未使用)
- CLSID公司
-
对话框的 CLSIDIPerPropertyBrowsing
控制单击省略号按钮时显示的对话框。使用“属性页”的属性示例包括填充图案名称属性和超链接属性。
- 椭圆Txt
-
对话框的显示字符串IPerPropertyBrowsing
此字符串与“属性页”的省略号按钮一起显示。例如,选择填充对象时的“ANSI31”填充图案名称属性。
如果需要使用接口,还提供了模板类。这可以与模板类结合使用,模板类仅实现 and 接口。IAcPiCategorizePropertiesIAcPiCategorizePropertiesImplIOPMPropertyExtensionImpl2IOPMPropertyExtensionIPerPropertyBrowsing
|