【发布时间】:2012-09-24 16:15:36
【问题描述】:
我有一个用作放置目标的 MFC 窗口。根据用户放置某些类型数据的位置,我想更改光标形状以指示将发生什么操作,只有这些操作不是移动/复制/链接,而是我有自定义光标的更复杂的操作。
这里有一个例子,如果它有帮助的话。想象一下,我有一个带有 2 个方块的窗口,用户可以在其中放置文件:在第一个方块中,文件通过电子邮件发送,在第二个方块中,文件存储在 Dropbox 中。我有一个电子邮件光标和一个保管箱光标,当用户将鼠标悬停在方块上时,我希望光标相应地改变。
在 MFC 中,您可以创建一个 COleDropSource 对象并重写它的 GiveFeedback() 方法来做到这一点。但是,这仅在您可以将该对象传递给 COleDataSource::DoDragDrop() 时才有效,即如果您自己开始拖动操作。如果拖动源自我的应用程序内部,则此方法有效,我可以获得所需的光标类型。如果拖动来自 Windows 资源管理器,我没有机会提供自己的 COleDropSource 对象,因此我无法覆盖光标形状。
直接在 OnDragOver() 中设置光标不起作用,因为 Windows 使用该方法的结果值来更改光标,因此在 Windows 将其更改回其中之一之前,我只看到所需光标的几分之一秒标准形状。
有没有其他方法可以解决这个问题?
(这个问题类似于this one,只是我使用的是MFC,所以那里提出的解决方案不起作用。)
【问题讨论】:
-
不可能,放置源在控制中。您可以随意更改目标外观。
标签: mfc drag-and-drop cursor