Mfc 拖放目标如何在源自外部的拖放中覆盖光标形状?

Mfc 拖放目标如何在源自外部的拖放中覆盖光标形状?,mfc,drag-and-drop,cursor,Mfc,Drag And Drop,Cursor,我有一个MFC窗口,可以作为投放目标。根据用户放置某些类型数据的位置,我想更改光标形状以指示将发生的操作,只是这些操作不是移动/复制/链接,而是更复杂的操作,我有自定义光标 这里有一个例子,如果有帮助的话。想象一下,我有一个有两个正方形的窗口,用户可以在其中放置文件:在第一个正方形中,文件通过电子邮件发送,在第二个正方形中,文件存储在Dropbox上。我有一个电子邮件光标和一个dropbox光标,我希望当用户将光标悬停在正方形上时,光标会相应地改变 在MFC中,您可以创建ColedopSourc

我有一个MFC窗口,可以作为投放目标。根据用户放置某些类型数据的位置,我想更改光标形状以指示将发生的操作,只是这些操作不是移动/复制/链接,而是更复杂的操作,我有自定义光标

这里有一个例子,如果有帮助的话。想象一下,我有一个有两个正方形的窗口,用户可以在其中放置文件:在第一个正方形中,文件通过电子邮件发送,在第二个正方形中,文件存储在Dropbox上。我有一个电子邮件光标和一个dropbox光标,我希望当用户将光标悬停在正方形上时,光标会相应地改变

在MFC中,您可以创建ColedopSource对象并重写其GiveFeedback()方法来完成此操作。但是,只有当您可以将该对象传递给COleDataSource::DoDragDrop()时,即如果您自己启动了拖动操作,这才有效。如果拖动源于我的应用程序内部,则此方法有效,我可以获得所需的光标类型。如果拖动源于Windows资源管理器,则我没有机会提供自己的ColedopSource对象,因此无法覆盖光标形状

直接在OnDragOver()中设置光标不起作用,因为Windows使用该方法的结果值来更改光标,所以在Windows将光标更改回标准形状之前,我只看到所需的光标几秒钟

还有其他办法解决这个问题吗


(这个问题类似于,只是我在使用MFC,所以建议的解决方案不起作用。)

恐怕源应用程序需要用户反馈。您可以通过IDropTarget向源应用程序提供提示,但使用该反馈的责任在于源程序


这真的很有意义,源应用程序才是真正知道数据是什么以及可以用它做什么的应用程序(想想从zip文件中拖动一个文件等等)。

不可能,拖放源处于控制之中。您可以按任何方式更改目标外观。