wxWidget treecontrol响应drag的步骤

来源:互联网 发布:音乐信息编辑软件 编辑:程序博客网 时间:2024/05/29 03:40

前提是窗口继承wxTreeCtrl, 


1, 在类的声明的结束部分的前面,加入

DECLARE_EVENT_TABLE()


来指示代码这个类需要消息路由。


2, 给自己的窗口一个ID,头文件中加入

enum{    TreeControlId = 3265;};



3,类的实现文件中,加入消息映射的具体表格

BEGIN_EVENT_TABLE(myTree, wxTreeCtrl) EVT_TREE_BEGIN_DRAG(TreeControlId, myTree::OnBeginDrag) EVT_TREE_END_DRAG(TreeControlID, myTree::OnEndDrag)END_EVENT_TABLE()

上面的路由指示窗口,遇到在窗口ID为"TreeControlId"中发生DRAG事件,请call我的OnBeginDrag() 和OnEndDrag()。


4、实现上面的两个函数。


5、在创建窗口的时候,初始化的时候调用父类wxTreeCtrl()的构造, 把TreeControlId这个ID送入,指示自己的这个窗口的id必须是我们预定义的,否则消息路由无法正确递送。


上面是让树能支持drag的最少的步骤,一个不能缺。特别是创建窗口的过程中的id,不能用缺省的那个wxID_ANY。


注:

窗口上如果从鼠标消息截取入手的话,有OnMouseEvent(), EVT_MOUSE_EVENTS这样的入口可以截取,系统传入的参数可以判断

event.LeftDown(), event.LeftUp(), event.Dragging()。这种方法自由度更高,但也更费劲。