BrewMP学习笔记

来源:互联网 发布:sql查询200到300条记录 编辑:程序博客网 时间:2024/06/10 18:34

首先链一遍文章 《BREW究竟是什么-BREW本质之我见》 。通过这遍文章我们能对Brew有一个基本的认识。
http://blog.chinaunix.net/u/25864/showart_252216.html

BrewMP是Brew演化到目前(2010-5)的最新版本。总的来说,BrewMP比之前的Brew更开放,更强大。高通官方提供一系列文章来介绍BrewMP。在这里给我带来的一个困惑是,文档中提到的一些新的特性是要到BrewMP1.1以后才支持的。但目前放出来的BrewMP的版本是1.0。文档中提到的用户进程现在都无法支持。实际写程序时当然不可能用到,所以只要知道高通提供了这么个东东就行。

BrewMP新引入了一个MOD1,相对于以前的MOD,程序的入口,程序的框架都有一定的改变。高通也提供了专门的文档对其进行介绍。可以参考的文档:《Programming Model for Developers》

Brew借鉴了COM的组件编程思想。整个Brew的开发框架都是基于组件的,一个Applet其实就是实现了一个IApplet接口的组件。每个Applet都通过组件的接口使用Brew的服务。Brew应用框架采用事件驱动的模型。Applet的运行完全由事件来推动,当一个Applet被加载后,Brew框架会给Applet发送各种事件,通过对这些事件的响应,Applet完成它的功能。Brew的事件机制和windows的消息机制很相似。但Brew的Applet只是一个被加载运行的组件,它不存在main loop. 每个事件的响应操作都有时间限制,一般来说是30秒。如果30秒内,一个事件的响应函数还没有返回的话。Brew将结束这个Applet.

接下来零散的纪录一些在以后看来可能无所谓的东西:
1、用向导生成的工程文件,相当于win32程序。此时并没有window和widget存在。程序员必须手动创建window或者widget.
2、当一个Applet响应EVT_APP_START_WINDOW事件后,Brew将把这个Applet当做一个Window Applet。
一个window applet将不会收到EVT_APP_START、EVT_APP_SUSPEND、EVT_APP_RESUME事件。因为window applet将和其他window applet共享屏幕,由window manager统一调度applet的显示。其实window applet可以被看作是后台运行的applet。所以EVT_APP_SUSPEND和EVT_APP_RESUME事件都被EVT_WDG_SETPROPERTY事件代替,EVT_WDG_SETPROPERTY事件的参数会指示,applet是被显示还是被隐藏。因为window applet是后台运行的,并且屏幕的绘制已经交由window manager管理。所以window applet最好不要操作IDisplay接口去绘制屏幕。
3、对于一个windowed applet.
Before using properties, applications must verify that the functionality is supported by the Window
Manager by calling IWindowMgr_CheckCapabilities()
4、Brew UI模型中,windowed application 和 widget 是两个相辅相成的东西。首先widget其实就是各种UI控件。widget自己负责在屏幕上画出自己,并且要处理一些相应的事件(例如RadioBox要负责在屏幕上画一个空心圆,在圆后面看出文字。当用户点击时,要在空心圆内画一个点,并且将自身的状态设置为checked)。而且windowed application就是引入一个windows manager,由这个window manager来管理窗口的显示。applet将屏幕组织成一个window,然后将这个window交给windows manager调度显示。windows manager的概念其实可以看成是微软的explorer的翻版。
5、实现手写输入时的UI动作,就是画出手写的笔划来。应该捕捉EVT_POINTER_DOWN、EVT_POINTER_MOVE、EVT_POINTER_STALE_MOVE、EVT_POINTER_UP这几个事件。如果直接在屏幕上画图这样就可以了。现在要求在一个专门的手写窗口来进行手写。这时可以在window里加入一个ImageWidget,给这个widget设置一个位图。在这个位图上画手写轨迹,然后用IWidget_invalide这个API来把笔划刷新到屏幕上。目前brewMP中用IDisplay_CreateDIBitmap创建的位图不支持Draw操作(非常的操蛋!不支持干嘛把接口放出来?据高通说以后可能会支持),从资源中load的位图同意不能Draw。我找到的办法是:首先IDISPLAY_GetDeviceBitmap取得屏幕的位图;然后IBITMAP_CreateCompatibleBitmap建立一个兼容的位图,把这个位图设置给imagewidget就可以自由地绘画了。IBITMAP_CreateCompatibleBitmap以后,就可以把得到的屏幕位图释放了。如果想要让这个位图背景透明,要使用RGBA的颜色来设置透明色。要不然不生效。但是从资源load进来的位图可以用RGB颜色。
6、在BrewMP中用boolean作为函数的返回值有风险。我有碰到程序crash的情况,就是因为使用boolean作为函数的返回值。

未完待续。。。(maybe 不会有续,,)

原创粉丝点击