S60应用程序框架

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、应用程序框架功能

    建立到文件服务器的连接。

    建立到视窗服务器的连接。

    建立到内存管理服务器的连接。

    完成一些注册工作。

    确保我们能够处理一般错误和内存不足的情形。

    初始化其他应用服务器(如字体提供服务器等)

    建立缺省的屏幕组件(状态栏、菜单栏、软键等)

2Symbian 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、应用程序视图

    我们的AppViewCCoeControl类继承,负责将模型中的数据绘制到屏幕上,也常常负责处理按键和触笔事件。

(1)HandlePointerEventL

    处理触笔事件。

(2)Draw

    完成模型数据的绘制功能,每个控件都与一个窗口相对应,并负责完成该窗口的绘制工作。

(3)SizeChanged

    当视图大小发生变化时,将调用该函数,该函数中应完成模型的重新绘制功能。 

你可能感兴趣的:(S60应用程序框架)