Обнаружение, когда вырезанные данные вставляются в MFC COleDataSource VS2008

Мне нужно определить, когда другое приложение / окно в моем приложении действительно вставляет мои ранее установленные данные, чтобы я мог удалить их из исходного окна. Я обнаружил, что COleDataSource::DelaySetData теоретически делает это и COleDataSource::OnSetData будет вызываться при вставке, но я не могу быть уверен. MSDN (как обычно) расплывчато об этом вопросе и четко не говорит о том или ином. Я буду использовать настраиваемый формат, а формат watever используется проводником для вырезания / вставки файлов. Итак, вопрос в том, как ТОЧНО (не теоретически) это можно сделать. Мне действительно нужно удалить элементы из моего окна тогда и только тогда, когда они вставлены в другое место.


person Pifcnt    schedule 14.04.2011    source источник


Ответы (1)


Вы все делаете неправильно. Когда вы что-то вырезаете, это должно быть немедленно удалено, и вы должны предоставить функцию отмены, если это необходимо восстановить.

Буфер обмена не предназначен для двунаправленной передачи сигналов. DelaySetData предназначена для приложений, которые отправляют большие объемы данных в различных форматах, поэтому им нужно только предоставить формат, который требуется получателю; его использование для определения появления пасты предполагает побочный эффект. Существуют менеджеры буфера обмена, которые могут сделать это неудачно.

person Mark Ransom    schedule 14.04.2011
comment
Прошу прощения, но вы ошиблись. Очень ошиблись. msdn.microsoft.com /en-us/library/aa969396.aspx#delete_on_paste. Я не поддерживаю отмену в моем приложении. На данном этапе добавление этой функции стоит очень дорого. И, как вы можете видеть из ссылки выше, даже Microsoft делает это. Если вы вырезаете что-то из проводника, файлы / каталоги не удаляются сразу. Они удаляются только после операции вставки. - person Pifcnt; 15.04.2011