31617105 发表于 2010-11-26 15:36:14

请问workbench是怎么触发事件的

view = rtgui_view_create("view");
    rtgui_widget_set_event_handler(RTGUI_WIDGET(view), view_event_handler);
后就会触发一次view_event_handler(struct rtgui_widget* widget, struct rtgui_event* event)这个函数的paint事件
请问这个事件是在什么地方触发他的,另外我想触发别的事件的话 我怎么去触发他呢 用什么函数或者什么方法呢

ffxz 发表于 2010-11-26 18:53:12

paint事件会从server端传递过来,如果是rtgui_widget_update,那么也会有paint事件产生,然后自行处理消化掉。

把rtgui_system.c中的
#define RTGUI_EVENT_DEBUG
打开,就会在控制台上看到事件的发送情况。

31617105 发表于 2010-11-29 09:28:32

回复【1楼】ffxz
-----------------------------------------------------------------------

另外我想触发别的事件的话 我怎么去触发他呢 用什么函数或者什么方法呢

ffxz 发表于 2010-11-29 19:34:51

你还需要触发什么事件?RT-Thread/GUI中包括了多种不同的事件,不同的事件触发的方法也不相同。

31617105 发表于 2010-12-2 12:17:52

回复【2楼】31617105
-----------------------------------------------------------------------

比如说我想绘图了 我怎么触发进入 rtgui_widget_set_event_handler(RTGUI_WIDGET(view), view_event_handler);
程序中去,

WEEQE1999 发表于 2010-12-7 21:08:56

关切中,我觉得应该是另有个线程去处理例如像鼠标/键盘或认为给一个事件,发给server,然后由server分发,不知道理解的对否?但不知道这个线程是现有的还是另外去编?
   此外,我如果像onbutton事件是button控件自己来发送,还是跟控件没有什么关系?没看懂程序,谢谢!

gavin_li 发表于 2010-12-8 11:57:57

每个workbench都有一个事件循环的函数。所有的鼠标,触摸事件都会由中断程序发消息到MQ里面。
workbench的事件循环程序就是不停的读这个MQ,有message就拿出来,分析坐标值,找到对应的控件。再call这个控件的事件函数。
Server端也是一样的吧,发消息到MQ.这个我就不是很清楚了。

ffxz 发表于 2010-12-8 22:56:30

Gavin Li说得很多,有的时候不明白的地方,稍微看看代码就清楚了。

对于按钮,onbutton实际上并不是一个事件,只有当鼠标在相应的地方点击时,才会被回调到。
页: [1]
查看完整版本: 请问workbench是怎么触发事件的