WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程Symbian程序开发深入hellogui.app

深入hellogui.app
作者:cofd  来源:www.sf.org.cn  发布时间:2005-12-20 2:22:02
上次只是简单的说明了GUI程序的结构,没有深入到具体代码和程序流程。本篇将深入介绍。

        hellogui包含以下文件:

  • Hellogui.cpp                    DLL 入口点
  • HelloguiAppliction.cpp       创建新的Document,定义应用程序UID
    HelloguiAppliction.h
  • HelloguiDocument.cpp       代表文件中的数据,创建AppUI
    HelloguiDocument.h
  • HelloguiAppUi.cpp             处理所有菜单命令
    HelloguiAppUi.h
  • HelloguiAppView.cpp         在屏幕上显示数据
    HelloguiAppView.h

程序流程

  1. 应用程序启动,框架装载hellogui.app,并且调用函数E32Dll
  2. 框架调用函数NewApplication,创建类HelloguiAppliction的实例,并且返回实例的指针。接着框架使用这个指针完成应用程序的创建
  3. 框架调用函数AppDllUid得到该程序的UID。此举的作用是判断该程序的实例是否已经运行,如果是,就不用新建一个该程序的实例,而是激活它
  4. 框架调用HelloguiAppliction的成员函数CreateDocumentL,创建一个类HelloguiDocument的一个实例并返回实例的指针。这样框架可以直接调用对象HelloguiDocument方法
  5. 框架再次调用AppDllUid,判断是否需要从文件系统装载文件,当然hellogui不用装载任何文件
  6. 框架调用对象HelloguiDocument的方法CreateAppUi,创建一个HelloguiAppUi对象,并返回指向它的指针
  7. 框架分别调用对象HelloguiAppUi的constructor和ConstructL方法
  8. 方法ConstructL首先调用基类的BaseConstructL来读取程序相关的资源文件
  9. AppUi 调用NewL创建HelloguiAppView。这里不再是框架调用
  10. 框架调用Draw绘图
  11. 无论何时用户选择了菜单,框架将调用HandleCommandL处理命令

还有一些是需要注意的:

  • 创建Application对象时使用的不是通常的New(ELeave),而是普通的New。这是因为这里该程序的TRAP harness还没有创建。如果无法分配内存,框架将处理
  • Application对象、Document对象、AppUi对象都是通过框架销毁。框架包含了这些对象的指针
  • Draw方法只能由框架调用。当程序启动、菜单消失、程序激活时框架自动调用Draw方法。如果程序员想要重绘屏幕,应该调用DrawNow方法
  • Draw方法不可以异常退出。因为这个函数是直接由框架调用的,框架并不知道如何处理可能的错误。所以Draw方法必须TRAP并处理可能的错误
  • 如果程序需要响应按键,AddTostackL方法必须被AppUi对象的ConstructL调用。此举将App View加入控件栈
  • All resource instances should be defined in lowercase in the RSS file.When referring to them from source code, however, they should be upper case.

hellogui虽然简单,但它是其它GUI程序的基础。在它的基础上很容易扩展成复杂的应用程序。

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码