Вот есть у меня вопросик по работе с буфером обмена в win. Это продолжение моего бодания по поводу drag&drop, который так и окончился ничем к сожелению. Решил я его убрать вообще.
в связи с этим вопрос — кто то пытался получить сообщение о тобм что PASTE операция завершена и как это сделать? И вообще это возможно на чистом API? Если не затруднит — то можно просто исходник безо всяких объяснений. Либо если не возможно просто на API без наворотов то хотябы как это сделать на OLE?
Еще раз суть проблемы:
1) есть несколько файлов для операции CUT
2) засунуты в clipboard с PREFFERED_ROPEFFECT = DROPEFFECT_MOVE
3) задача отследить что кто то их вставил — и удалить их со старых мест
Пункты с 1-2 пока сделаны без всякого OLE и MFC. Если без OLE в данном случае не объяснить, то очень прошу исходник какойнидь как работать с DataObject и всем что с ним связано. В инете вообще по этому поводу данных очень мало — видимо настолько специфичная задача, что очень редко используется. Либо все используют MFC )))
Смотрел на CodeGuru и на Sources и еще на куче различных поисковиков — не нашел инфы. Единственное, что раскопал — вроде если OLE, то там вызывается какой-то метод SetData с параметром PASTESUCCEEDED, но ни одного исходника не нашел к сожелению.
19.02.07 11:14: Перенесено модератором из 'C/C++' — Кодт
Здравствуйте, ionicman, Вы писали:
I>Еще раз суть проблемы: I>1) есть несколько файлов для операции CUT I>2) засунуты в clipboard с PREFFERED_ROPEFFECT = DROPEFFECT_MOVE I>3) задача отследить что кто то их вставил — и удалить их со старых мест
№3 сделать невозможно по определнию.
Содержимое clipboard можно вставлять во много мест.
И никто тебе не скажет что он забрал те файлы. Просто нет такого понятия как transfer. Только copy.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, ionicman, Вы писали:
I>>Еще раз суть проблемы: I>>1) есть несколько файлов для операции CUT I>>2) засунуты в clipboard с PREFFERED_ROPEFFECT = DROPEFFECT_MOVE I>>3) задача отследить что кто то их вставил — и удалить их со старых мест
CS>№3 сделать невозможно по определнию. CS>Содержимое clipboard можно вставлять во много мест.
Че то я не понял причем тут много мест?
CS>И никто тебе не скажет что он забрал те файлы. Просто нет такого понятия как transfer. Только copy.
Да мне и не надо знать кто.
Мне просто надо знать что операция Paste состаялась — чтобы удалить из источника и из списка файлы
Здравствуйте, c-smile, Вы писали:
I>>Еще раз суть проблемы: I>>1) есть несколько файлов для операции CUT I>>2) засунуты в clipboard с PREFFERED_ROPEFFECT = DROPEFFECT_MOVE I>>3) задача отследить что кто то их вставил — и удалить их со старых мест
CS>№3 сделать невозможно по определнию. CS>Содержимое clipboard можно вставлять во много мест. CS>И никто тебе не скажет что он забрал те файлы. Просто нет такого понятия как transfer. Только copy.
Кстати говоря нет Грамотно написанный IDropTarget после получения данных с DROPEFFECT_MOVE вызывает у переданного IDataObject метод SetData c форматом CFSTR_PASTESUCCEEDED. И тот, кто реализует IDropSource, должнен позаботиться о том, чтобы удалить старый файл.
Здравствуйте, ionicman, Вы писали:
CS>>И никто тебе не скажет что он забрал те файлы. Просто нет такого понятия как transfer. Только copy. I>Да мне и не надо знать кто. I>Мне просто надо знать что операция Paste состаялась — чтобы удалить из источника и из списка файлы
В реализации IDataObject::SetData обработайте два дополнительных формата:
— CFSTR_PASTESUCCEEDED
Вставка завершилась удачно, данные можно удалять.
— CFSTR_TARGETCLSID
Данные вставлены с спец папку. Нужно проверить переданный CLSID на равенство CLSID_RecycleBin и, если совпадет, то удалить файлы, потому как их сбросили в корзину.