手机高通平台BUIW简介

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

BUIW Training 01/07 2008

Content

•预备知识

•Dialog框架(历史回顾)

•BUIW概述

•BUIW基本原理

•BUIW的使用(用BUIW构建app的UI)

预备知识

•高通平台的mmi由许多app组成,每个app可分为logic和ui,app的ui由一系列的界面组成,每个界面由多个界面元素组成,比如一个图标,一个字符串,都是界面元素。在Dialog体制框架下,一个界面就是一个Dialog,一个或多个相关的界面元素构成一个Control,在BUIW下,它们分别叫做Form和Widget。

预备知识

•IDisplay对象

类似MFC里的CDC对象,每个app有自己IDisplay对象,重要的函数如下

IDISPLAY_DrawText绘制文本

IDISPLAY_MeatureTextEx测量文本宽度

IDISPLAY_SetColor设置颜色(比如文的前背景色)

IDISPLAY_SetClipRect设置剪切区域

IDISPLAY_Update更新屏幕

IDISPLAY_FillRect以指定颜色填充矩形

•IImage对象

IImage_Draw绘制图片

IImage_SetOffset设置源图的偏移(画源图的一部分)

IImage_SetDrawSize设置图的剪切大小

画图的一般方法

P_img=ISHELL_LoadResImage();

IImage_Draw(P_img);

IImage_Release(P_img);

UI框架就是对上述函数的封装,app程序员可以只用上述函数实现一个app的ui,但工作量很大,不易扩展,维护。

预备知识

•三个重要的接口

1.IBASE接口

IBASE是所有对象的基类,记录对象的引用数量,确定对象的创建和释放uint32 (*AddRef) (iname*); //加引用数量

uint32 (*Release) (iname*); //减引用数量

2.IQueryInforace接口

继承于IBASE,支持接口查询,若查询成功,返回指针,并增加引用计数

int(*QueryInterface)(iname*, AEECLSID, void **);//查询接口

3.IHandler接口

继承于IQueryInforace,具备消息处理机制

boolean(*HandleEvent) (iname*,AEEEvent evt,uint16 wParam,uint32 dwParam);

void (*SetHandler)(iname*, HandlerDesc*pDesc); //设置消息处理器

•用Dialog构建app的UI的大致过程

1.用Brew SDK里的Resource Editor新建Dialog,在Dialog里添加几个Control,(只

能添加它支持的控件),保存为*.brx,build,生成bar,同时生成brh

2.在程序中,调用ISHELL_CreateDialog创建Dialog,并设置Handle

boolean wordclock_HandleEvent(wordclock*pMe,AEEEvent eCode,uint16 w,uint32 dw)

{

switch (eCode)

{

case EVT_APP_START:

ISHELL_CreateDialog(pMe->a.m_pIShell,WC_RES_FILE, IDD_DIALOG_MAIN, NULL);

return(TRUE);

case EVT_DIALOG_INIT:

IDIALOG_SetEventHandler((IDialog*)dwParam,

(PFNAEEEVENT)WorldClockDlgEvtHdrs[wParam-WORLDCLCOK_DLG_BASE],

(void *)pMe);

IDIALOG_SetProperties((IDialog*)dwParam,DLG_HANDLE_ALL_EVENTS);

return TRUE;

…………………………….

}

}

3.在Dialog的Handle里用如下办法访问Control

boolean wordclock_DlgHdlMain(wordclock*pMe,AEEEvent evt,uint16 w,uint32 dw) {

switch(evt)

{

case EVT_DIALOG_START:

pIDialog=ISHELL_GetActiveDialog(pMe->a.m_pIShell);

p_ImgCtrl=IDIALOG_GetControl(pIDialog,IDC_MAIN_TEXT);

IIMAGECTL_SetRect(p_ImgCtrl,&rc);

return TRUE;

……………………….

}

}

•Dialog的问题

app对dialog的管理没有代码,dialog对Control的管理也没有代码,事件在它们间的传递更没有代码,很多Control也没有代码,由于brew已有的Control无法满足ui的要求,所在venice项目上,自主开发了menu和list,但menu,list没有被Dialog管理,需要app程序员主动调用相应过程来传递事件和重画。在venice项目上,很多数界面元素都是app程序员调用IDisplay或IImage接口直接画屏,总之,控件化,模块化程序不高,app程序员和组件程序员的职责不清。因此,在ROMA项目中,我们采用了BUIW框架

相关文档
最新文档