S60应用程序框架
一、Symbian OS 工程结构
1、目录结构
Includes:系统提供的公共头文件。
data:资源目录,存放程序资源文件(.rss/.rls/_reg.rss)。
help:帮助文件目录,存放帮助文件。
inc:项目相关的头文件。
src:项目相关的源文件。
gfx:存放程序图标。
group:项目目录,存放用于编译信息的文件(.mmp/.inf)。
sis:打包目录,存放sis打包文件。
2、文件类型
hrh文件:定义头文件,定义ID、命令等枚举变量。
rss文件: 资源文件,一般存放在data目录下,定义程序中的对话框、控件、字符串等资源。
rls文件: 本地化字符串文件,一般存放在dada目录下 ,为资源中定义的字符串赋值。将该文件分离出来,可以根据不同的语言编码可以保存为L01(英文)、L31(中文)等扩展名,有助于系统支持不同的语言,从而增强了可移植性。
mbm文件: Symbian OS中的多位图文件,一般由bmp文件生成。
mmp文件:项目定义文件。
inf文件,解决方案相关文件。
pkg文件: Symbian打包定义文件,由之生成安装文件。
二、应用程序框架结构
1、应用程序框架功能
建立到文件服务器的连接。
建立到视窗服务器的连接。
建立到内存管理服务器的连接。
完成一些注册工作。
确保我们能够处理一般错误和内存不足的情形。
初始化其他应用服务器(如字体提供服务器等)。
建立缺省的屏幕组件(状态栏、菜单栏、软键等)。
2、Symbian OS应用程序框架相关类
(1) Application
应用程序的入口,提供了应用程序文档的工厂,用于定义应该程序的属性,提供了对于应用程序资源文件的接口。
(2)Document
代表着应用程序的数据模型,负责建立到引擎、文件、数据库等的连接。在基于文件的应用程序中,文档类本周上代表文件中的数据;在非基于文件的应用程序中,用于负责创建应用程序用户接口。
(3)Application Ui
应该程序用户接口类,负责创建应用程序视图,处理绘图和基于屏幕的交互。该类需要捕获应用程序的命令,响应按键行为,包括属于应用程序UI的主视图的按键行为。
(4)Application View
一个具体的控件,负责在屏幕上显示应用程序数据并且允许用户与它交互。通常情况下,应用程序视图也负责处理输入事件。
Symbian OS应用程序的整体类的结构如下图所示:
三、基于应用程序框架的编程
1、启动应用框架
要启动应用程序框架需要实现两个函数:
(1)E32Main
该函数是Symbian OS 应用程序的入口函数,调用EikStart::RunApplication函数。该函数接受应用程序类的指针作为参数。
(2)应用程序类工厂
用户创建应用程序类的新实例,该函数不接受异常退出。
2、实现应用程序类
我们的Application类需要继承自CAknApplication,并实现AppDllUid以及CreateDocumentL函数。
AppDllUid:返回应用程序的UID,该UID在应用程序头文件中定义,头文件中的UID引用来自hrh文件中的_UID定义。
CreateDocumentL:创建文档类对象的工厂函数,注意,尽管由应用程序创建文档,但是由应用程序框架赋值销毁它。
3、实现文档类
我们的Document类继承自CAknDocument类,大多数功能已由基类提供,最简单的情况,我们为序需要CreateAppUiL函数。
(1)CreateAppUiL
创建应用程序接口类对象的工厂函数。用于实例化应该程序UI类的一个对象。
4、实现应该程序UI
我们的AppUi类继承自CAknAppUi类,负责完成视图实例的创建和销毁,以及处理应用程序命令。涉及到需要关注的函数包括:第二级构造函数、析构函数、命名处理函数等。
(1)ConstrucL
在该函数中需要创建视图类的实例。在创建视图类实例时传递的参数为视图的大小,默认大小为ClientRect(),若希望视图全屏显示,修改该参数为ApplicationRect()。
(2)析构函数
删除视图类对象,并将代表视图类对象的成员变量置为NULL。
(3)HandleCommandL
处理命令事件,事件可以从一系列的源头如菜单、软键等产生。命令通过命令ID的整型值进行识别,命令ID在头文件(.hrh)的枚举常量中定义。
(4)HandleStatusPaneSizeChange
client尺寸改变处理函数,默认操作为设置client大小为ClientRect()。若在ConstructL 函数中修改为全屏显示,最好在此处也做相应的修改,否则若中途发生client尺寸改变,将造成与原始大小的不一致。
5、应用程序视图
我们的AppView从CCoeControl类继承,负责将模型中的数据绘制到屏幕上,也常常负责处理按键和触笔事件。
(1)HandlePointerEventL
处理触笔事件。
(2)Draw
完成模型数据的绘制功能,每个控件都与一个窗口相对应,并负责完成该窗口的绘制工作。
(3)SizeChanged
当视图大小发生变化时,将调用该函数,该函数中应完成模型的重新绘制功能。