我正在开发一个程序,该程序需要同时从本地磁盘和Internet打开图像。 WxWidgets提供wxFileDropTarget
和wxTextDropTarget
,但是每个类只能支持一种类型的数据对象(wxFileDataObject
和wxTextDataObject
)。我尝试从两个基类派生类,但是编译器说ambiguous conversions from 'CMyDropTarget *' to 'wxDropTarget *'
。如何创建一个接受两个数据类型的窗口?
最佳答案
据我所知,最简单的解决方案是使用wxDataObjectComposite
,Add()
和wxFileDataObject
都使用wxTextDataObject
。
您可以从wxDropTarget
派生自己的类,重写其纯虚拟OnData()
,然后在派生类的构造函数中使用适当构造的SetDataObject()
调用其wxDataObjectComposite
。wxDataObjectComposite
的文档中有一个很好的例子。它概述了需要完成的工作,只是请记住,我认为其中有些细节不太正确:
对wxDropTarget::OnData()
的调用将不起作用,因为它是纯虚拟的(在我看来,您根本不应调用它)。
但是,您应该改为调用GetData()
,以首选的数据格式(或另一种可用的数据格式)填充wxDataObjectComposite
,并测试其返回值。dataObjects->GetReceivedFormat()
应该是dataobjComp->GetReceivedFormat()
。