Страница 1 из 2
Drag & Drop файлов из CListControl
Добавлено: 19 май 2004, 07:30
subver
Здравствуйте, не подскажете как решить следующую проблему?
В CListControl есть список файлов, после события LVN_BEGINDRAG инициалищируется COleDataSource, далее устанавливаеются все параметры и в конце вызывается Datasrc.DoDragDrop(DROPEFFECT_COPY).
Все работает нормально, но когда файл большой (фильм к примеру) то окно приложения не реагирует ни на что пока файл не скопируется, или пока юзер не отменит операцию копирования. Как быть?
Я пробовал запускать DoDragDrop в отдельном потоке, так там даже сама операция перетаскивания не начинается.
Добавлено: 19 май 2004, 14:34
Romeo
Плохо значит пытался. Отдщельная thread'а - это действительно один из самых частоиспользуемых путей для решения подобной проблемы.
Добавлено: 21 май 2004, 09:24
subver
Пример кода запуска операции DragDrop из CListCtrl в студию, плиз!
З.Ы. только рабочего

А с потоками я нормально могу работать, не в этом дело, просто по-моему OLE не работает из отдельного потока.
Romeo писал(а):Плохо значит пытался. Отдщельная thread'а - это действительно один из самых частоиспользуемых путей для решения подобной проблемы.
Добавлено: 21 май 2004, 10:55
Andy
Пример кода запуска операции DragDrop из CListCtrl в студию, плиз!
Примеры есть кстати и в MSDN. Но лучше на
http://www.codeguru.com - в частности
вот тут. См. раздел Drag & Drop.
Добавлено: 21 май 2004, 16:26
Romeo
subver писал(а):
...по-моему OLE не работает из отдельного потока...
Прикольно, а OleInitialize не пробовал делать?

Добавлено: 24 май 2004, 07:02
subver
[quote=""Romeo
Прикольно, а OleInitialize не пробовал делать?

[/quote"]
Не, вы че меня совсем за дурака держите? Я же объяснил что все работает и единственная проблема - это блокирование основного потока при перетаскивании большого файла.
Я наткнулся на описание IAsyncOperation - вроде то, что надо, но не получается прикрутить к IDataObject. Експлорер запрашивает интерфейс IID_IAsyncOperation, я ему возвращаю указатель на мой объект DataObject, но после этого эксплорер не вызывает почему-то IAsyncOperation::GetAsyncMode() моего DataObject и начинает копирвоать файл как и раньше, где грабли?
Добавлено: 24 май 2004, 15:11
Romeo
Значит твой отимплименченный QueryInterface не поддерживает IID_IAsyncOperation идентификатор. Как следствие IE, вызывая этот метод, получает E_NOIMPLENT и всё падает.
Добавлено: 25 май 2004, 07:01
subver
Romeo писал(а):Значит твой отимплименченный QueryInterface не поддерживает IID_IAsyncOperation идентификатор. Как следствие IE, вызывая этот метод, получает E_NOIMPLENT и всё падает.
Вот кусок из QueryInterface моего DataObject'a:
Код: Выделить всё
if(]
При отладке дебаггер проваливается в (1), выполняется (2) и все :(
дальше ничего не происходит и Explorer копирует файл в обычном режиме.
Добавлено: 25 май 2004, 15:21
Romeo
Не могу сказать что здесь не так. Слишком мало информации.
Добавлено: 27 май 2004, 12:52
subver
Romeo писал(а):Не могу сказать что здесь не так. Слишком мало информации.
Может есть идеи как сделать копирование файла вручную, после того как юзер скинет его куда ему там надо?