ObjectARX, AutoCAD. Среда программирования библиотеки C++



         

Категоризировать свойства - часть 3


(DWORD *)::CoTaskMemAlloc(sizeof(DWORD) * size);

for (long i=0;i<size;i++)

pCaCookiesOut->pElems[i] = i;

pCaStringsOut->cElems = size;

pCaCookiesOut->cElems = size;

pCaStringsOut->pElems[0] = ::SysAllocString(L"Center X");

pCaStringsOut->pElems[1] = ::SysAllocString(L"Center Y");

pCaStringsOut->pElems[2] = ::SysAllocString(L"Center Z");

}

return S_OK;

}

STDMETHODIMP CAsdkSquareWrapper::GetElementGrouping(

/* [in] */ DISPID dispID,

/* [out] */ short *groupingNumber)

{

return E_NOTIMPL;

}

STDMETHODIMP CAsdkSquareWrapper::GetGroupCount(

/* [in] */ DISPID dispID,

/* [out] */ long *nGroupCnt)

{

return E_NOTIMPL;

}

STDMETHODIMP CAsdkSquareWrapper::GetPredefinedStrings(

DISPID dispID, CALPOLESTR *pCaStringsOut,

CADWORD *pCaCookiesOut)

{

return E_NOTIMPL;

}

STDMETHODIMP CAsdkSquareWrapper::GetPredefinedValue(

DISPID dispID, DWORD dwCookie, VARIANT *pVarOut)

{

return E_NOTIMPL;

}

Динамические Свойства и OPM

Проблема с информацией типа состоит в том, что это является статическим. Это определено во времени компиляции в .idl файлах и не может изменяться легко во время выполнения. Microsoft обеспечивает интерфейсы, наиболее особенно ITypeInfo2 и ICreateTypeInfo, для так называемого динамического создания информации типа. Однако, эти интерфейсы только позволяют Вам добавлять информацию типа от существующей структуры ITypeInfo, которая относится к существующему интерфейсу отправки. Не имеется никакого метода во время выполнения для опроса объекта относительно его информации свойства. Чтобы заполнять этот промежуток и позволять любому DLL добавлять свойства к OPM, IDynamicProperty интерфейс был определен. Это позволяет Вам осуществлять IDynamicProperty полученный класс для каждого свойства, которое Вы желаете добавить к OPM. OPM может тогда вызывать методы этого класса, чтобы получить всю информацию, которую требоваться отобразить любой тип свойства.

IPropertyManager управляет, как OPM может получить указатели на эти интерфейсы свойства во время выполнения. Для каждого объекта AcRxClass в AutoCAD, клиент может получить указатель на объект, который осуществляет IPropertyManager. Это обработано внутренне через расширения протокола. Как только Вы имеете менеджера свойства для AcRxClass, Вы заинтересованы, Вы можете добавлять ваши классы свойства к этому через IPropertyManager:: AddProperty (). Когда пользователь выбирает объект того класса, OPM получит менеджера свойства для того класса, перечислит все классы свойства, и опрашивать те классы для их информации свойства, которую это тогда отобразит наряду с статическими свойствами того объекта. Обратите внимание, что класс IDynamicProperty не делает никакие предположения относительно того, где данные свойства сохранены. Это просто требует, чтобы  реализация IDynamicProperty обеспечила это, когда GetCurrentValueData () вызван. Точно так же, когда пользователь изменяет динамическое свойство, OPM назовет SetCurrentValueData () с новым значением, оставляя это до реализации, чтобы решить, как установить то значение. Это оставляет это до Вы, чтобы решить, как делать динамические данные свойства постоянными.




Содержание  Назад  Вперед