Страница 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&#40]

При отладке дебаггер проваливается в (1), выполняется (2) и все :(
дальше ничего не происходит и Explorer копирует файл в обычном режиме.

Добавлено: 25 май 2004, 15:21
Romeo
Не могу сказать что здесь не так. Слишком мало информации.

Добавлено: 27 май 2004, 12:52
subver
Romeo писал(а):Не могу сказать что здесь не так. Слишком мало информации.
Может есть идеи как сделать копирование файла вручную, после того как юзер скинет его куда ему там надо?