Интересно, кто-нибудь знает, есть ли способ запустить перетаскивание OLE-файла из приложения C32 Win32 без блокировки до завершения перетаскивания.
В настоящее время я использую DoDragDrop () , чтобы начать операцию перетаскивания, но эта функция не возвращается, пока операция перетаскивания не будет завершена.
Проблема в том, что анимация в моей программе останавливается во время перетаскивания.
Я пытался запустить эту команду из нового потока, но это не сработало, даже если я вызвал OleInitialize () в этом потоке.
Единственное, что я обнаружил в связи с этим, - это асинхронное выполнение операции с данными (например, копирование / перемещение файла / данных). В моем приложении перетаскивание не используется для таких операций, поэтому это не проблема, и основной проблемой является блок во время перетаскивания пользователем.
Изменить: Чтобы быть более ясным об этом: IAsyncOperation на DataObject не является решением этой проблемы, потому что это делает операцию, происходящую только после того, как данные были отброшены асинхронно.
Проблема, с которой я столкнулся, - это поведение блокировки с момента, когда пользователь начинает перетаскивать, до момента, когда он отпустит кнопку мыши.
2 решения приходят на ум, но я надеюсь, что будет более легкий или лучший способ достичь этого.
Реализация моего собственного (не оле) перетаскивания. Это было бы больше работы, и я на самом деле нашел отличную возможность перетаскивать файлы из моей программы в другие программы.
Создайте / запустите новый процесс и начните операцию перетаскивания оттуда. Поскольку у меня нет проблем при перетаскивании файла из проводника Windows внутри моего приложения, я думаю, что это может сработать.
Перетаскивание должно начаться немедленно, и я не знаю, занимает ли заметное время создание нового процесса.