wxDataViewCtrl and DnD

wxDataViewCtrl and DnD

本文关键字:DnD and wxDataViewCtrl      更新时间:2023-10-16

我在Linux上使用wxWidgets 3.0.2和Gtk。

我正在尝试使wxDataViewCtrl成为拖放操作的放置目标。 我从 wxTextDropTarget 派生了一个类,然后调用了 wxDataViewCtrl::SetDropTarget(( 以使该类的实例成为 wxDataViewCtrl 的放置目标。

但是,什么也没发生。 每次我尝试在 wxDataViewCtrl 上放一些东西时,wxDropSource::D oDragDrop(( 方法都会返回 wxDragCancel。 对于我的自定义wxTextDropTarget类,我覆盖了OnEnter((方法,并在我进入wxDataViewCtrl时将其写入stdout "OnEnter((",但没有任何内容写入stdout。

为了测试我是否在正确执行自定义 wxTextDropTarget 类并正确设置放置源,我在 GUI 中添加了一个 wxTextCtrl,并使放置目标和所有内容按预期工作:wxDropSource::D oDragDrop(( 返回 wxDragCopy,当我输入 wxTextCtrl 时,"OnEnter(("将被写入 stdout。

wxDataViewCtrl 不支持 DnD 吗? 还是我忽略了什么?

只是想我会跟进我自己的帖子,以防其他人遇到同样的问题。

编写了一个小型测试程序只是为了在控件和 wxDataViewCtrl 之间测试 DnD 并发现它工作正常之后,我回到了我原来的应用程序并盯着它多看了一会儿,试图弄清楚我正在做什么不同。 事实证明,我需要在目标 wxDataViewCtrl 的 PARENT 窗口中调用 SetDropTarget((,而不是 wxDataViewCtrl 本身,即 my_data_view_ctrl->GetParent((->SetDropTarget(blah blah blah(;。

但是,我不必在我的测试程序中这样做,所以我觉得这有点奇怪。 我的测试程序和实际程序之间的唯一区别是,在我的实际程序中,我在wxStaticBoxSizer中具有wxDataViewCtrl,我认为这是问题。 我怀疑wxStaticBox(wxStaticBoxSizer使用(正在接收删除通知而不是wxDataViewCtrl,因此为什么我需要将其设置为SetDropTarget((而不是wxDataViewCtrl。