Mendeteksi ketika data yang dipotong ditempelkan di MFC COleDataSource VS2008

Saya perlu mendeteksi kapan aplikasi/jendela lain di aplikasi saya menempel pada data yang saya tetapkan sebelumnya, sehingga saya dapat menghapusnya dari jendela sumber saya. Saya telah menemukan bahwa COleDataSource::DelaySetData secara teoritis melakukan ini dan COleDataSource::OnSetData akan dipanggil ketika terjadi paste, tapi saya tidak yakin. MSDN (seperti biasanya) tidak jelas tentang masalah ini dan tidak dengan jelas mengatakan satu atau lain cara. Saya akan menggunakan format khusus dan format apa pun yang digunakan penjelajah untuk memotong/menempelkan file. Jadi pertanyaannya adalah bagaimana PERSIS (bukan secara teoritis) hal ini dapat dilakukan. Saya benar-benar perlu menghapus item dari jendela saya jika dan hanya jika item tersebut ditempel di tempat lain.


person Pifcnt    schedule 14.04.2011    source sumber


Jawaban (1)


Anda melakukan semuanya dengan salah. Saat Anda Memotong sesuatu, itu seharusnya segera dihapus, dan Anda harus menyediakan fungsi undo jika perlu dipulihkan.

Papan klip tidak dirancang untuk sinyal dua arah. DelaySetData ditujukan untuk aplikasi yang mengirimkan data dalam jumlah besar dalam format berbeda, sehingga hanya perlu menyediakan format yang diperlukan oleh penerima; menggunakannya untuk mendeteksi kapan terjadi pasta mengandalkan efek samping. Ada pengelola papan klip yang mungkin membuat ini gagal.

person Mark Ransom    schedule 14.04.2011
comment
Saya minta maaf tapi Anda salah.Sangat salah.msdn.microsoft.com /en-us/library/aa969396.aspx#delete_on_paste. Saya tidak mendukung pembatalan dalam aplikasi saya. Menambahkan fitur ini memerlukan biaya yang sangat besar pada saat ini. Dan, seperti yang Anda lihat dari tautan di atas, bahkan Microsoft pun melakukan hal ini. Jika Anda memotong sesuatu dari explorer, file/direktori tidak akan langsung terhapus. Mereka dihapus hanya setelah operasi tempel selesai. - person Pifcnt; 15.04.2011