ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 深入hellogui.app(转)

深入hellogui.app(转)

原创 Linux操作系统 作者:jcszjswkzhou 时间:2019-04-05 11:30:06 0 删除 编辑
上次只是简单的说明了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程序的基础。在它的基础上很容易扩展成复杂的应用程序。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126352/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-29

  • 博文量
    3488
  • 访问量
    2604040