[摘要] 本文主要介绍了Sybmian S60基本程序的框架,这里详细阐述了当程序运行时,发生在各对象之间的交互顺序。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
[关键词] Carbide.C++ Symbian 框架
【Abstract 】This paper describes the framework of the basic procedures for Symbian S60, and elaborate that when the program runs, took place in the order of the interaction between the various objects.
【Keywords 】Carbide.C++;Symbian
下面就来剖析一个典型的hello world框架。
1.下图显示了一个标准应用程序所使用的类的家族图
2.这里详细阐述了当程序运行以及用户选择菜单选项时,发生在各对象之间的交互顺序。下面做成了一个图,按顺序进行了逐一的阐释。
3.下面就图上标注的消息来一一说明:
1、应用程序启动,框架装入应用程序DLL,E32Dll method被调用。
2-3、框架调用函数NewApplication,这里生成了一个HelloWorldBasicApplication类的实例,并返回一个指向它的指针。接下来框架会使用这个指针来完成程序的构造。
4、框架调用AppDllUid以获得实际程序的UID,这个UID做什么用的那,例如,如果一个程序正在运行,而要启动这个程序的另一个实例,这时该运行的程序就会被切换到前台,而不是重新生成一个。
4、框架调用AppDllUid以获得实际程序的UID,这个UID做什么用的那,例如,如果一个程序正在运行,而要启动这个程序的另一个实例,这时该运行的程序就会被切换到前台,而不是重新生成一个。
5- 8、框架在调用CHelloWorldBasicApplication对象的CreateDocumentL函数,这就生成了一个应用程序文档并返回一 个指向它的指针。从而使得框架可以直接调用Document的某些功能。而文档对象也通过调用自己的静态函数NewL获得创建。
9、框架调用AppDllUid,来观察是否要从文件系统中装入一个文件。这里的示例不需要永久存储某些信息,因此不需要与之相关的东西。
10-11、框架调用文档对象的CreateAppUi方法,从而生成了一个App UI对象并返回一个指向它的指针。
12、框架通过调用App UI对象的ContructL函数来完成其构造,事实上在这里完成了App UI想做的所有初始化。
13、ContructL函数首先调用的是App UI基类的BaseContructL函数,这里处理了一些相关事宜,如读入一个与该程序相关的资源文件。
14-16、AppUi调用了AppView类的NewL函数来生成其实例,这里也是用的双重构造。
17、框架调用了Draw函数,怎么调用的还不是因为它从Application->Document->Ui->View不管是直接拥有还是间接拥有,framework到现在都有了无限的调度权利,呵呵。这样调用Draw后就绘制了view。
18-20、无论用户何时选择一个菜单选项,HandleCommandL都被框架所调用,并传递一个参数aCommand,它指明了用户所选择的命令。在这里示例中App UI生成了一个Information note,并显示了它。
4.总结
本章节所介绍的carbide c++的基本结构,我们在设计程序之前必须对它的框架有更清晰的了解,各类之间的关系也需更明确的理解,这需要我们多读代码以熟悉框架。
转载于:https://blog.51cto.com/lulala/198195