如何在 wxWidgets 中 drag/drop 同时 window 文件和文本?
How to drag/drop both file and text in same window in wxWidgets?
我正在开发一个需要从本地磁盘和互联网打开图像的程序。 WxWidgets提供了wxFileDropTarget
和wxTextDropTarget
,但是每个class只能支持一种类型的数据对象(wxFileDataObject
和wxTextDataObject
)。我尝试从两个基本 class 派生 class,但编译器说 ambiguous conversions from 'CMyDropTarget *' to 'wxDropTarget *'
。如何创建一个 window 接受两种数据类型?
据我所知,最简单的解决方案是使用 wxDataObjectComposite
,您 Add()
同时使用 wxFileDataObject
和 wxTextDataObject
。
您从 wxDropTarget
派生您自己的 class,覆盖其纯虚拟 OnData()
,并在您的派生 class' 构造函数.
wxDataObjectComposite
的文档中有一个很好的例子。它向您概述了需要完成的工作,请记住,我认为其中有一些细节不太正确:
- 对
wxDropTarget::OnData()
的调用将不起作用,因为那是一个纯虚拟的(我认为你根本不应该调用它)。
- 但是,您应该改为调用
GetData()
,以使用首选数据格式(或其他可用的数据格式)填充 wxDataObjectComposite
,并测试其 return 值。
dataObjects->GetReceivedFormat()
应该是 dataobjComp->GetReceivedFormat()
.
我正在开发一个需要从本地磁盘和互联网打开图像的程序。 WxWidgets提供了wxFileDropTarget
和wxTextDropTarget
,但是每个class只能支持一种类型的数据对象(wxFileDataObject
和wxTextDataObject
)。我尝试从两个基本 class 派生 class,但编译器说 ambiguous conversions from 'CMyDropTarget *' to 'wxDropTarget *'
。如何创建一个 window 接受两种数据类型?
据我所知,最简单的解决方案是使用 wxDataObjectComposite
,您 Add()
同时使用 wxFileDataObject
和 wxTextDataObject
。
您从 wxDropTarget
派生您自己的 class,覆盖其纯虚拟 OnData()
,并在您的派生 class' 构造函数.
wxDataObjectComposite
的文档中有一个很好的例子。它向您概述了需要完成的工作,请记住,我认为其中有一些细节不太正确:
- 对
wxDropTarget::OnData()
的调用将不起作用,因为那是一个纯虚拟的(我认为你根本不应该调用它)。 - 但是,您应该改为调用
GetData()
,以使用首选数据格式(或其他可用的数据格式)填充wxDataObjectComposite
,并测试其 return 值。 dataObjects->GetReceivedFormat()
应该是dataobjComp->GetReceivedFormat()
.