BREW中应用的事件处理主要是通过app HandleEvent,但是当应用所具有的界面非常多时,在app HandleEvent中如何根据当前app具体运行的界面来进行事件处理就相对复杂了。本人看了一些相关文档和代码,稍有体会,现与大家共同交流,探讨。
此时,可以采用以下3种方式:
1,可以采用状态机方式。 app的某个界面(或者几个相关界面)通常表明 app当前处于某个功能操作中,此时,我们可以在 app 的struct中增加一个state成员,用来表征当前app的 state(当前app 运行至何处),在app handleevet中根据当前的 state,将事件分发给具体的 state_HandleEvent处理。 示例代码见BREW SDK Example 中的WhiteBoard
2,采用Dialog方式。 将App的每一个界面都设计成一个Dialog,界面上的control作为 Dialog 的 Control存在。每当创建一个界面Dialog的同时,为该界面Dialog 注册一个Dialog HandleEvent,这样,每当进入某个App界面时,相应的界面Dialog被创建和激活。之后所有事件直接由界面上的 Control处理,Control不处理的事件由 Dialog HandleEvent 处理。当需要退出当前界面时,在 Dialog HandleEvent中Release Dialog,从而使得事件处理从新回到App HandleEvent. 示例代码为QCT Release 的6550平台的CoreApp应用处理机制
3,采用Form 方式,此时采用BUIT的 Form 方式,每一个界面对应一个Form,分别注册自己的 Form Handleevent,RootForm会自动将event分发给处于 top stack的Form. 示例代码请见BUIT 的calculator Example
4,自己创建接口体系,对应用的每个功能窗体实现一个接口,所有这些接口都继承于一个基窗体,比如IWINDOW,将其作为抽象接口。其他所派生的功能窗体接口均需要实现IWINDOW定义的vtbl的所有函数,特别的,应该具有IWINDOW_REDRAW, IWINDOW_HandleEvent这样两个接口函数。每个功能窗体接口同时具有自身的创建函数。这样在窗体间切换时,就相当于释放原先接口,创建新接口。而由于均派生至IWINDOW抽象接口,所以对于事件处理,重画窗体处理可以采用统一的IWINDOW_HandleEvent,IWINDOW_ReDraw的多态处理.示例代码请见BREW SDK Example中的 Mediaplayer
brew 界面交互方式
最新推荐文章于 2023-01-11 19:08:54 发布