急!是否有人成功地在ATL Control中实现了用户属性的Persistence?
Lii 2001-04-12 03:51:00 大家好!
我在编写ATL Control时遇到了一个棘手的问题. 假设我的ATL Control向用户提供一个字符型的属性"Caption". 默认值为"Control1".当某个VB程序使用该ATL Control时,用户在Design Mode下将该属性赋值为"myControl",然后他便存盘退出了VB.下一次他再打开该VB程序时,"Caption"属性的值很明显应为"myControl",也就是他上次存盘的值.这便是属性的Persistence.由于VB使用PropertyBag实现Persistence,于是我在ATL Control进行了如下操作:
1. 在我的ATL Control的继承类列表中添加了"public IPersistPropertyBagImpl<CMyATL>";
2. 在BEGIN_COM_MAP(CMyATL)/END_COM_MAP()宏中添加了"COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag)";
3. BEGIN_PROP_MAP(CMyATL)/END_PROP_MAP()宏中添加了"PROP_ENTRY("Caption", 1, CLSID_NULL)", 其中第二个参数"1"是属性"Caption"的ID号.
根据MSDN上的介绍,以上三步便可实现我自定义的属性"Caption"的Persistence.但事实却恰恰相反,有了以上三步后,VB在Design Mode下Load我的ATL Control时竟然出错!不知是否有人遇到过相同的问题,是不是我上述三步操作不对?正确的方法应该是什么?Please help and thanks in advance....