如何在wxWidgets的同一窗口中拖放文件和文本

How to drag/drop both file and text in same window in wxWidgets?

本文关键字:拖放 文件 文本 窗口 wxWidgets      更新时间:2023-10-16

我正在开发一个程序,该程序需要从本地磁盘和互联网上打开图像。WxWidgets提供了wxFileDropTargetwxTextDropTarget,但每个类只能支持一种类型的数据对象(wxFileDataObjectwxTextDataObject)。我尝试从两个基类派生类,但编译器显示ambiguous conversions from 'CMyDropTarget *' to 'wxDropTarget *'。如何创建一个接受两种数据类型的窗口?

据我所知,最简单的解决方案是使用wxDataObjectComposite,其中Add()既是wxFileDataObject也是wxTextDataObject

您从wxDropTarget派生自己的类,覆盖其纯虚拟OnData(),并在派生类的构造函数中使用适当构造的wxDataObjectComposite调用其SetDataObject()

wxDataObjectComposite的文档中有一个很好的例子。它为您提供了需要做什么的概述,请记住,有一些细节我认为不太正确:

  • wxDropTarget::OnData()的调用不起作用,因为这是一个纯粹的虚拟(在我看来,你根本不应该调用它)
  • 但是,您应该调用GetData(),以使用首选数据格式(或其他可用的数据格式)填充wxDataObjectComposite,并测试其返回值
  • dataObjects->GetReceivedFormat()应该是dataobjComp->GetReceivedFormat()