ตรวจหาเมื่อมีการวางข้อมูลที่ตัดแล้วใน MFC COleDataSource VS2008

ฉันต้องตรวจสอบว่าเมื่อใดที่แอปพลิเคชัน /หน้าต่างอื่นในแอปของฉันวางลงบนข้อมูลที่ตั้งค่าไว้ก่อนหน้านี้ ดังนั้นฉันจึงสามารถลบออกจากหน้าต่างต้นทางได้ ฉันค้นพบว่า COleDataSource::DelaySetData ตามทฤษฎี ทำเช่นนี้ และ COleDataSource::OnSetData จะถูกเรียกเมื่อมีการวางเกิดขึ้น แต่ฉันไม่แน่ใจ MSDN มีความคลุมเครือ (ตามปกติ) เกี่ยวกับเรื่องนี้และไม่ได้พูดอย่างชัดเจนไม่ทางใดก็ทางหนึ่ง ฉันจะใช้รูปแบบที่กำหนดเองและรูปแบบไฟล์ที่ explorer ใช้สำหรับตัด / วางไฟล์ ดังนั้นคำถามก็คือว่าสามารถทำได้อย่างไร (ไม่ใช่ทางทฤษฎี) ฉันจำเป็นต้องลบรายการออกจากหน้าต่างของฉันจริงๆ หากวางรายการเหล่านั้นไว้ที่อื่น


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 เองก็ทำเช่นนี้ หากคุณตัดบางสิ่งออกจาก explorer ไฟล์/ไดเร็กทอรีจะไม่ถูกลบทันที สิ่งเหล่านี้จะถูกลบ หลังจาก การดำเนินการวางเสร็จสิ้นเท่านั้น - person Pifcnt; 15.04.2011