以下文字大量的参考了Nokia的文献(因为我比说的详细,正确)
S60 C++应用程序范例HelloWorld
Symbian OS 6.1
60系列平台成功的关键就是Symbian OS,Symbian操作系统是该产品的基础。 Symbian OS是32位的多任务操作系统,在这种系统中事件经常不
同时发生,应用程序因此被设计成可以进行相互间的交互。比如:突然的来电可能打断用户正在进行的电子邮件编辑工作;某位用户也许在通
话过程中要从电子邮件切换到日程表应用程序;或者,一条刚收到的短消息可能触发用户去访问联系人数据库,然后再转发收到的短消息。按
照平台架构和软件设计指导,应用程序设计者可以为智能电话用户在日常生活中遇到的这类事件提供井然有序的管理手段。
60系列C++软件开发工具包
60系列平台备有自己的SDK,它基于Symbian SDK。第三方开发商可以使用API用C++来开发60系列平台的新应用,并将这些应用包含到他们自己
的产品中,或作为不同于销售应用的各种增值应用。 60系列SDK向开发伙伴提供文档、工具和示例代码等支持,同时还提供一个可在微软
Windows中运行的模拟器。该SDK对于开发、测试和调试各种C++应用程序是非常重要的。
C++应用程序范例
用于60系列设备的两个“Hello World”应用程序,其中一个是控制台应用程序,另一个是基本的图形用户界面应用程序。需要用微软的
Visual C++ 6.0(Service Pack 3)来建立这些应用程序,由于该SDK的编译系统调用Perl脚本,所以也必须安装Perl应用。
控制台应用程序
第一个“Hello World”范例是一个控制台应用程序,它包含一个具有扩展名 .exe 的单一可执行文件。在Symbian OS中,这种可执行文件主要
用于两种目的:作为没有用户界面的服务器,或者作为只具备非常简单的字符界面的测试工具。各种典型的复杂图形化应用程序则会用到应用
程序框架和各种用户界面库。而本文稍后将介绍一个基于图形化用户界面的“Hello World”应用程序。
创建并以命令行运行
打开命令提示符,选择装有60系列SDK的驱动器,进入包含项目代码的文件夹,比如: \Symbian\6.1\Series60\Epoc32Ex\Basics\HelloWorld
该文件夹中有3个文件:
HelloWorld.cpp - 源文件
HelloWorld.mmp - 项目定义文件
Bld.inf - 组件定义文件
要建立该范例程序,请键入: bldmake bldfiles 这条命令将生成一个新文件,即ABLD.BAT;该文件总是按照一定的要求自动生成,不应对其
进行编辑。
要编译并链接该项目,请键入: abld build wins udeb 这条命令将建立一个针对60系列调试模拟器的项目。
用下列方法运行这个程序: 在命令提示符状态,进入含有“Helloworld.exe”程序的文件夹。比如: \Symbian\6.1\Series60\Epoc32
\Release\wins\udeb 在命令提示符后键入: helloworld
这样就启动了60系列模拟器
从IDE(集成开发环境)建立并运行程序
通常诸如HelloWorld这样的应用工程是在微软 的Visual C++ 6.0 IDE(集成开发环境)里创建并运行的,
其步骤如下: 如果ABLD.BAT文件并不存在(或者,如果.mmp文件或bld.inf文件已经被更改),必须键入如下命令生成创建(Build)命令文件
: bldmake bldfiles
接下来的命令是: abld makefile vc6 这样就创建了Visual C++项目和工作空间文件(.dsp和.dsw)。
这两个文件位于\epoc32\build子目录下,即: \epoc32\build\symbian\6.1\series60\epoc32ex\basics\helloworld\helloworld\wins 在
Visual C++中打开工作空间文件HelloWorld.dsw,按F7创建(Build)该应用,然后按Ctrl+F5运行该应用。
控制台模拟器将随着HelloWorld应用程序的运行而自动启动。
Symbian OS应用程序框架
UIKON和标准的EIKON是应用程序框架的两个重要部分。它们不仅为装载各种应用提供框架,而且也为应用程序的运行提供了一系列的标准控件
(如对话框、数字编辑器、日期编辑器等)。
在实践中,为Symbian OS编写的典型应用由四种不同的组件组成,每个组件都对应一个UIKON/EIKON框架中的类,它们是:
?? 应用程序壳类 – 继承自CEikApplication类。这个类最早被应用程序框架实例化,一旦被创建,它就承担起初始化其余代码的责任。继承
自CEikApplication的新类然后会创建以下类。
?? 文档类 –继承自CEikDocument类。所有的应用程序都有继承自CEikDocument的类。在缺省状态下,当第一次运行应用程序时CEikDocument
会创建一个缺省的文档文件。然而,并非所有的程序都基于文件,也就是说,有些程序不必向用户提供创建、打开或编辑文档等的功能。对于
这些非基于文件的应用,如电话应用,比起应用程序壳来,应用程序框架并非更需要这种文档类的实例来创建AppUi类实例,以及典型的模块/
引擎实例。对于基于文件的应用,文档类可以存储,读取永久数据。
?? 应用程序用户界面类 – 继承自Uikon的CEikAppUi类。这个类向所有的应用程序提供了最主要的功能,诸如事件处理、控件创建、访问众多
的系统调用等。继承自CEikAppUi的类往往要创建一个或多个应用程序视图。
?? 视图类 – 这个类向用户提供在屏幕上实际看到的东西。所有的应用程序都有一个缺省视图,或者多个复杂视图,比如日程表就能提供许多
个视图。视图可以仅仅用于显示数据(如HelloWorld中的例子),也可以在许多交互应用中向用户收集数据。比如:许多数据输入应用中的数
据编辑器只是该视图所内含的Uikon标准控件。在大多数应用中,视图继承自CCoeControl类,即:它们是拥有自我管理权的控件。
60系列程序框架
Avkon是专门针对60系列平台的用户界面层。它提供了广泛的用户界面组件,并实现了许多继承自UIKON和标准EIKON框架基类的类,这些类向
Avkon应用赋予了60系列平台所特有的各种属性和表现力。
?? CAknDocument – 这个类继承自CEikDocument类,作为应用程序文档的基类,使用这个类来访问某个缺省的应用文档文件用不着初始化,大
多数的Avkon应用都适合这种情况。把CAknDocument类用作应用文档的基类,缺省情况下Avkon不能创建文档文件。
?? CAknAppUi – Avkon applications (except view architecture applications) derive from this class. This class supports
several Avkon-specific functionalities:
?? CAknAppUi – 各种Avkon应用(不包括视图框架应用)都继承自这个类。这个类支持若干Avkon功能: • 支持按键音 • CBA和StatusPane的
附件支持 • TextResolver(文本分析器) – AknAppUI::HandleError()实现的Avkon出错报告 • Avkon视图框架集成 • 控制转存 – 程序调
试特性 CAknViewAppUi 所有基于视图框架(见下文 “其他图形用户界面设计”)的应用必定继承自这个类,而它又继承自CAknAppUi类。各种
应用视图可以继承自CAknView类。
?? 应用启动 –CAknApplication类继承自CEikApplication类。这个类重构了PreDocConstructL()函数和 OpenIniFileLC(RFs& aFs)函数,从
而修改了CEikApplication类。实现PreDocConstructL 函数的作用是要保证正在构造的应用实例并非已存在。如果应用实例已存在,则应用程
序自动切换到该实例,然后退出。只对那些非嵌入式应用执行这种检查。在缺省情况下,各种60系列应用并不支持.ini文件,被重载的
OpenIniFileLC()如果被调用,它将实现一个简单的异常导出。
如果一定要用.ini文件,该应用要在应用程序类中实现这个调用方法CEikApplication::OpenIniFileLC。
资源文件
Symbian OS使用资源文件(如HelloWorld.rss)来定义图形化用户界面应用的屏幕外观,
许多有关应用的外观、行为,以及功能等的定义信息被储存在资源文件中;作为程序的外部主体,状态窗格、菜单、热键,甚至每个对话框等
都可以在资源文件中定义。
运行时可以根据需要高效地载入各种资源,所以对内存的需求也很小。 应用资源文件由文本脚本文件(其典型的扩展名为.rss)定义。
在创建时它们被编译成压缩的二进制文件(其缺省扩展名为.rsc)。不必对主程序进行重新编译就可以通过资源文件对本地化进行支持,所有
的用户界面文本通常都被分离出来放在单独的头文件里(其约定扩展名为.loc),并将其在主资源文件中通过#include语句引用。
只要将这个.loc文件翻译成不同的语言就可完成本地化工作。 资源文件开始显得很复杂,不过逐渐地就变得简单明了。
在60系列SDK里有对应用程序资源文件完整的说明和示例。
源文件
下列文件构成了应用程序的主要部分:
HelloWorldApp.cpp - 应用程序
HelloWorldAppUi.cpp - 应用程序用户界面
HelloWorldDocument.cpp - 文档
HelloWorldContainer.cpp – 视图
HelloWorld.rss – 定义许多用户界面的标准资源文件。
编译源文件前资源编译器将自动调用这个文件(只有当资源编译器最近一次运行后,资源文件被更新时)。
资源编译器的输出往往是二进制文件,为应用运行提供资源信息,如HelloWorld.rsc。
HelloWorld_caption.rss – 含有应用程序图标的标题,即该应用程序在60系列用户界面的“app launcher”中所显示的名称。
该用户界面的缩放等级有两种尺寸。在创建立过程中,这个文件也为资源编译器所调用。
Hello.uid.cpp –UID源文件,由创建工具自动生成,它通常位于:\epoc32\build\symbian\6.1\series60\helloworld\group\helloworld\wins。