Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > Передать из com-объекта CImageList


Автор: Прусак 18.4.2014, 12:25
Привет!

Начал разбираться com объектами, поэтому возник, возможно, глупый вопрос.

Есть задание: надо реализовать файловый менеджер, но вся работа с файловой системой должна выполняться на com-сервере. Сталкнулся с проблемой как отобразить иконки для папок и файлов. 
Необходимо иметь список иконок CImageList* m_pImgList.

HIMAGELIST hlmg = (HIMAGELIST)::SHGetFileInfo("c:\\",0, &info, sizeof (info), SHGFI_SYSICONINDEX | SHGFI_SMALLICON); 

m_TreeControl.SetImageList(m_pImgList, TVSIL_NORMAL);  



Но покольку вся работа с файловой системой происходит в ком, а отображение в клиенте, то необходимо как-то передать список иконок в клиента, но com не поддерживает такой тип данных. 
Подскажите, что можно сделать в данной ситуации.

Спасибо

Автор: xvr 18.4.2014, 13:49
CImageList - это MFC'ный класс, обвертка вокруг Windows common image list control. Очевидно, что в COM объекте создавать классы из чужого окружения (MFC в данном случае) и выдавать их наружу бесполезно и крайне опасно  smile. А вот создать и вернуть сам Windows common image list control можно (конечно, если COM сервер находится в dll), это будет HIMAGELIST (который можно считать void*). У себя потом позовете http://msdn.microsoft.com/en-us/library/d25650k1.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)