Тема: Работа с динамическими свойствами
Добрый день, только начал работать с динамическими свойствами в AutoCAD.
Возникло несколько вопросов:
1. Добавил к проекту DialogProperty. У класса есть функция:
STDMETHOD(GetCustomDialogProc)(OPMDIALOGPROC* pDialogProc) ;
Так и не понял что нужно возвращать. Порылся в хелпе, там сказано, что OPMDIALOGPROC используется для обозначения процедуры: typedef BOOL (*OPMDIALOGPROC)(void);
Хотел бы увидеть простенький пример возвращения процедуры с помощью OPMDIALOGPROC.
2.Никак не могу обратится к своим свойствам,через IPropertyManager. А хранить ссылки на свойства, как то не хочется.
Добавляю свойства к своему обьекту следующим образом:
//Получаем ссылку на мэнеджер динамических свойств данного макрообьекта CComPtr<IPropertyManager2> pPropManager = (IPropertyManager2*) GET_OPMPROPERTY_MANAGER(pMacro); //Инициализация библиотеки CoInitialize(NULL); //Создаем фабрику классов CComPtr<IClassFactory> pClassFactory = NULL; CoGetClassObject(CLSID_EnumProperty,CLSCTX_INPROC_SERVER,NULL,IID_IClassFactory,(void **)&pClassFactory); //Если фабрика классов была создана if (pClassFactory) { //Получаем ссылку на необходимый интерфейс CComPtr<IEnumProperty> pEnumProperty = NULL; pClassFactory->CreateInstance(NULL,IID_IEnumProperty,(void **)&pEnumProperty); //pEnumProperty->AddRef(); //Если интерфейс был получен if (pEnumProperty) { _com_util::CheckError(pPropManager->AddProperty(pEnumProperty)); } } }
Затем пытаюсь удалить их:
CComPtr<IPropertyManager2> pPropManager = (IPropertyManager2*)GET_OPMPROPERTY_MANAGER(pMacro); CComPtr<IUnknown> pDynamicProperty = NULL; BSTR s = SysAllocString((_bstr_t)_T("Сегменты")); pPropManager->GetDynamicPropertyByName(s,&pDynamicProperty); s = SysAllocString((_bstr_t)_T("Материал")); pPropManager->GetDynamicPropertyByName(s,&pDynamicProperty); long nPropertyCount = -1; pPropManager->GetDynamicPropertyCountEx(&nPropertyCount); for (long nPropertyIndex = 0;nPropertyIndex<nPropertyCount;nPropertyIndex++) { //CComPtr<IDynamicProperty> pDynamicProperty = NULL; pPropManager->GetDynamicProperty(nPropertyIndex,&pDynamicProperty); if (pDynamicProperty) { pPropManager->RemoveProperty(pDynamicProperty); } }
При этом ни единого упоминания о существовании свойств функции класса IPropertyManager, не возвращают.
3.Возможно ли удалить стандартные свойства присвоенные макрообьекту ?