您的位置:首页 > 产品设计 > UI/UE

WGUI2.0事件处理框架结构

2010-03-27 15:30 169 查看
  WGUI1.0结构中图元控件都需要进行自主控制,适合于单窗口界面,开发效率较低,同时界面元素的事件处理需要用户程序参于完成,经常导致程序结构复杂,同时也解决不了多窗口界面应用问题,于是重新设计了WGUI2.0结构,将图形层的处理工作交给系统完成,并支持多窗口操作。

  WGUI2.0在WGUI1.0的基础上做了很大改进,作为一个硬实时简单GUI系统,WGUI2.0仍然是定位于简单应用的仪器仪表单面板应用中,在这种应用中,要求响应速度快,同时后台用户任务的处理速度也要较快,WGUI2.0中将对某些重要的操作先进行用户事件回调,再处理界面图元,这种调整对用户来说更加增强了实时性。

  在内存消耗方面,WGUI2.0并未采用较大的缓冲区,图元采用硬刷新方式来完成。这对于小内存的MCU来说是非常重要的,可最大程度的降低系统成本。

  WGUI2.0在应用层API方面借用面向对象编程语言的一些接口习惯,使用了较为通用的调用方法,其接口API分为系统调用类和用户调用类,同时所有系统调用类的API可用户自行调用,但系统不对此做安全性维护,用户可参于界面效果补充维护。

  应当指出,WGUI2.0仍然不是一个通用的GUI,而是专为小SRAM的MCU应用而设计的,面向简单应用和简单事件响应的微型GUI。

  WGUI2.0仍需要最低WRTOS3.0版本支持。事件由WRTOS提供的消息队列提供,下图为WGUI2.0的基本框架:

  


  WGUI2.0采用一个叫事件收集器的结构来整理用户消息,这部分会与用户程序接口,事件发生器可以是多种形式的,如用户的键盘、触屏驱动程序,软件发出的消息请求等等,事件发生器整理成为统一的事件消息发送到事件收集器,在WGUI2.0中,所有窗口共享同一个消自循环队列,接收来自事件收集器整理后的消息,并负责对其进行解释。当前消息队列的使用权仅归被激活的窗口所有。

  WGUI2.0为了解决键盘事件重用问题,如有些按键Fn等等不需要经过图形层响应的,引入了一个叫事件过滤器的中间过程,它将对窗口消息队列进行消息过滤,当检测到某些特殊消息时,直接回调到用户任务,这样最大程度的缩短了事件的处理过程,用户任务可直接截获此消息,或者重新发往GUI事件响应层,实现消息共享与重用。

  WGUI2.0触发消息层与WGUI1.0采用了完全不同的处理方法,在WGUI2.0中,所有的控件都强制支持一个系统定义的WGUI_BaseData的数据结构,这个结构定义了各控件强制处理的基本事件,WGUI2.0消息触发器将自动检测消息的状态,并自动处理Onfocus、Unfocus、OnLoad等事件,对控件的图元处理通过WGUI_BaseData结构实现,并接收控件图元的处理结果,用来判断下一步动作,这更加有利于WGUI2.0的控件扩展。在界面图元处理返回后,将立即产生用户回调,以使用户任务响应GUI事件。

  用户任务可以在控件上自由挂载事件响应方法,可以从两种方式中捕获到同一事件,在事件过滤器之后的回调中和WGUI消息触发之后,前者响应的及时性要远高于后者,若前者事件在过滤器中继续向后共享,则事件将再次产生响应,这对某些应用来说是很必要的和有用的。

  WGUI2.0与WGUI1.0一样,在界面图元中提供了一组交互API,在控件中也提供有独立的API,这些API可以参于修改图形层的表现形式,也可以获取或设置图元的参数,不过WGUI2.0在数据结构上有些小改动,使之更容易实现扩展。

  WGUI2.0的事件处理框架基于WRTOS消息队列和硬实时性,将更易于使用和维护。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: