Drag & Drop файлов из CListControl

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

subver
Сообщения: 7
Зарегистрирован: 19 май 2004, 07:10
Откуда: Омск
Контактная информация:

Здравствуйте, не подскажете как решить следующую проблему?

В CListControl есть список файлов, после события LVN_BEGINDRAG инициалищируется COleDataSource, далее устанавливаеются все параметры и в конце вызывается Datasrc.DoDragDrop(DROPEFFECT_COPY).
Все работает нормально, но когда файл большой (фильм к примеру) то окно приложения не реагирует ни на что пока файл не скопируется, или пока юзер не отменит операцию копирования. Как быть?
Я пробовал запускать DoDragDrop в отдельном потоке, так там даже сама операция перетаскивания не начинается.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Плохо значит пытался. Отдщельная thread'а - это действительно один из самых частоиспользуемых путей для решения подобной проблемы.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
subver
Сообщения: 7
Зарегистрирован: 19 май 2004, 07:10
Откуда: Омск
Контактная информация:

Пример кода запуска операции DragDrop из CListCtrl в студию, плиз!
З.Ы. только рабочего ;)
А с потоками я нормально могу работать, не в этом дело, просто по-моему OLE не работает из отдельного потока.
Romeo писал(а):Плохо значит пытался. Отдщельная thread'а - это действительно один из самых частоиспользуемых путей для решения подобной проблемы.
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Пример кода запуска операции DragDrop из CListCtrl в студию, плиз!
Примеры есть кстати и в MSDN. Но лучше на http://www.codeguru.com - в частности вот тут. См. раздел Drag & Drop.
*provided AS IS
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

subver писал(а): ...по-моему OLE не работает из отдельного потока...
Прикольно, а OleInitialize не пробовал делать? :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
subver
Сообщения: 7
Зарегистрирован: 19 май 2004, 07:10
Откуда: Омск
Контактная информация:

[quote=""Romeo
Прикольно, а OleInitialize не пробовал делать? :) [/quote"]

Не, вы че меня совсем за дурака держите? Я же объяснил что все работает и единственная проблема - это блокирование основного потока при перетаскивании большого файла.
Я наткнулся на описание IAsyncOperation - вроде то, что надо, но не получается прикрутить к IDataObject. Експлорер запрашивает интерфейс IID_IAsyncOperation, я ему возвращаю указатель на мой объект DataObject, но после этого эксплорер не вызывает почему-то IAsyncOperation::GetAsyncMode() моего DataObject и начинает копирвоать файл как и раньше, где грабли?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Значит твой отимплименченный QueryInterface не поддерживает IID_IAsyncOperation идентификатор. Как следствие IE, вызывая этот метод, получает E_NOIMPLENT и всё падает.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
subver
Сообщения: 7
Зарегистрирован: 19 май 2004, 07:10
Откуда: Омск
Контактная информация:

Romeo писал(а):Значит твой отимплименченный QueryInterface не поддерживает IID_IAsyncOperation идентификатор. Как следствие IE, вызывая этот метод, получает E_NOIMPLENT и всё падает.
Вот кусок из QueryInterface моего DataObject'a:

Код: Выделить всё

 if&#40]

При отладке дебаггер проваливается в (1), выполняется (2) и все :(
дальше ничего не происходит и Explorer копирует файл в обычном режиме.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Не могу сказать что здесь не так. Слишком мало информации.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
subver
Сообщения: 7
Зарегистрирован: 19 май 2004, 07:10
Откуда: Омск
Контактная информация:

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