Предисловие: Я экстраполирую найденную документацию и не беспокоюсь, если я ошибаюсь. Пожалуйста, убедитесь, что следующее объяснение имеет смысл, то есть попробуйте, прежде чем голосовать за мой ответ или принять его:)
После поиска в Google OnDropFiles
я обнаружил, что он унаследован от класса CWnd
: (страница MSDN)
Согласно этой статье MSDN:
Параметры
hDropInfo
Указатель на внутреннюю структуру данных, которая описывает отброшенные файлы. Этот дескриптор используется функциями Windows DragFinish
, DragQueryFile
и DragQueryPoint
для получения информации об удаленных файлах.
Цитирование позже:
"Фреймворк вызывает эту функцию-член, когда пользователь отпускает левую кнопку мыши над окном, которое зарегистрировалось в качестве получателя удаленных файлов.
"Как правило, производный класс предназначен для поддержки удаленных файлов и регистрируется во время создания окна.
Эта функция-член вызывается платформой, чтобы ваше приложение могло обрабатывать сообщение Windows. Параметры, передаваемые в вашу функцию, отражают параметры, полученные платформой при получении сообщения. Если вы вызываете реализацию этой функции в базовом классе, эта реализация будет использовать параметры, изначально переданные с сообщением, а не параметры, которые вы передаете в функцию. "
То, что появляется , чтобы указать, что до тех пор, пока функция не будет зарегистрирована, она не будет работать «как положено».
Поэтому я считаю, что в тот момент, когда вы в первый раз помещаете что-то в CHTMLView, оно регистрируется, и только затем «работает как положено».
Если мое понимание верно, то возникает новый вопрос, каким образом вы можете форсировать регистрацию Представления. Из связанных ссылок в MSDN Technote, похоже, что вы можете принудительно запустить DragAcceptFiles
(см. Здесь) , что в противном случае могло бы сработать, когда событие удаления завершится.