如何在 wxWidgets 中 drag/drop 同时 window 文件和文本?

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

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

据我所知,最简单的解决方案是使用 wxDataObjectComposite,您 Add() 同时使用 wxFileDataObjectwxTextDataObject

您从 wxDropTarget 派生您自己的 class,覆盖其纯虚拟 OnData(),并在您的派生 class' 构造函数.

wxDataObjectComposite 的文档中有一个很好的例子。它向您概述了需要完成的工作,请记住,我认为其中有一些细节不太正确:

  • wxDropTarget::OnData() 的调用将不起作用,因为那是一个纯虚拟的(我认为你根本不应该调用它)。
  • 但是,您应该改为调用 GetData(),以使用首选数据格式(或其他可用的数据格式)填充 wxDataObjectComposite,并测试其 return 值。
  • dataObjects->GetReceivedFormat() 应该是 dataobjComp->GetReceivedFormat().