0

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

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

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

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

有没有其他方法可以解决这个问题?

(这个问题类似于这个问题只是我使用的是 MFC,所以那里提出的解决方案不起作用。)

4

1 回答 1

0

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

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

于 2012-09-25T08:34:12.507 回答