【问题标题】:How can the drop target override the cursor shape in a drag and drop originating from the outside?拖放目标如何在源自外部的拖放中覆盖光标形状?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多