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