S60应用程序框架

来源:互联网 发布:选择lua不选择python 编辑:程序博客网 时间:2024/06/01 08:00

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

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安防资质取消了怎么办 执业医师证丢了怎么办 监理员证过期了怎么办 法院给传票不去怎么办 心悦会员过期了怎么办 美宝旅行证过期怎么办 施工员证过期3年怎么办 电脑上没声音了怎么办 电脑音频被删了怎么办 微信绑定不上qq怎么办 微信绑定qq频繁怎么办 qq绑定不了微信怎么办 微信绑定不了qq怎么办 微信号登录不上怎么办 微信号登不上去怎么办 微信忘记密码怎么办啊 微信密码忘记了怎么办 维a酸乳膏掉皮怎么办 用维a酸乳膏脱皮怎么办 微信红包发不了怎么办 红包一次发3个怎么办 红包没领删除了怎么办 不主动还钱的人怎么办 老婆要离婚我不想离怎么办 男人有外遇女人该怎么办 QQ里有人假冒你怎么办 微信有人冒充我怎么办 有人冒充我的qq怎么办 微信有人冒充你怎么办 海底捞8折会员卡怎么办 西安公交卡坏了怎么办 吃生大蒜胃疼怎么办 养竹子的水臭了怎么办 雾霾引起的咳嗽怎么办 招财竹叶子发黄怎么办 养的富贵竹水臭怎么办 3年水竹叶子发黄怎么办 蒸柜下面漏蒸汽怎么办 美国自驾游驾照怎么办 装修抽屉门大了怎么办 当私人教练老了怎么办