首页 > 技术文章 > 嵌入式开发 > Symbian > symbian 入门系列 -- document对象分析

symbian 入门系列 -- document对象分析

52RD.com 2005年6月3日 cysnew            评论:0条 我来说两句
Document分析

  【继承关系】

   --------------------------
      CAknDocument -> CEikDocument -> CApaDocument
   --------------------------

  【主要作用】

    1) 是app的data model。
    2) 在基于文件的app中,document提供了对于文件的访问(store/restore)
    3) 负责创建AppUI,从而可以提供修改document的基础,CreateAppUiL()负责创建
       application的appUI对象。

    实际上,document起到了一个中间层(intermediate layer)的作用。负责在appui和

  app model(engine)以及 file之间建立联系。

      
           『AppUI』
     ----------------------- 『Document』
                |
          『model』 <-> 『file』

   【Document的管理】

     1) OpenFileL() 

        这个函数的功能和app的资源文件中的TBUF段(segment)密切相关。

       RESOURCE TBUF r_default_document_name
       { 
         buf=""; 
       }

        这个segment决定了application关联的文件名。这里的文件名连同路径就作为参数传递给了

   OpenFileL() 函数。这就使得application在启动的时候能够调用缺省的file,如果这个segment是

   空的,那么缺省的document的名字和application的basename相同。这里需要注意的是series60只

   允许存在一个缺省的file。

        这个函数的返回值是CFileStore*,这是返回给application framework的指针,以方便

   application framework把它传递给其他函数。

       【注】

 注意OpenFileL() 需要三个参数,其中文件名(TDesC& aFilename)和file server session

        参数(RFs& aFs) 应当是由application framework自动创建的。但是另外一个参数怎么确定的呢?

     2) NewDocumentL()

       这个函数是由application framework来调用,用于初始化一个default document file。

      【注?】

       这个函数是不是在资源文件没有文件名的情况下调用的?如果是这样,那么这个函数应当在OpenFileL() 

   之前被调用?

      【解释】

       我在Document函数里面重载了函数NewDocumentL()和OpenFileL(),并分别加上了断点跟踪调试。发现:

   (#) 如果在资源文件中没有文件名的话,那么这两个函数都不执行。

   (#) 如果在资源文件存在文件名的话,那么首先执行的是OpenFileL()函数,但是这个时候的aOpen参数值是0,表明

   文件不存在或者文件没有打开。那么接下来调用NewDocumentL(),这个函数负责创建一个新的document file。

   接下来会调用document类的StoreL()函数。
    
   (#) 在晚上上述的步骤之后,再重新运行这个app,那么启动的时候会调用OpenFileL()函数,这个时候aOpen参数值是1,

   表明文件存在,那么接下来就调用ReStoreL()函数对文件进行读写。

     【对相关file的管理】

       document类提供了两个函数对文件的mode访问和修改。AppFileMode()和SetAppFileMode()。


     【对相关file的访问存取】

       document类提供了如下函数对file进行访问:
       SaveL();StoreL();RestoreL();ExternalizeL();PrintL();

       其中SaveL()会在app退出的时候被调用,用于保存app相关的数据到file中去。

       SaveL() --> StoreL();

       而RestoreL()是在app启动的时候调用的,负责把文件的信息保存在document相关的model(engine)中去。

 【具体的UI/engine的结构以后在仔细的研究一下:-)】
(52RD.com)

读取...
顶一下
 更多Symbian资源 到Symbian论坛讨论
·热门文章 HOT
·手机充电器电路原理图及充电器的安全...
·功率MOSFET(Power MOSFET)的基本知识
·手机充电器电路原理图
·RGB ,YUV, YCbCr的定义
·功率放大器设计的关键:输出匹配电路...
·阻抗匹配与史密斯(Smith)圆图: 基本...
·SD和MMC记忆卡介面技术
·uClinux下Nor Flash的JFFS2文件系统...
·新手必读:关于Linux,你所不了解的...
·手机结构总揽
·Windows Mobile 5.0 模拟器
·手机结构设计经验总结
·移动终端天线设计技巧
·EMI / EMC设计(一)被动元件的隐藏...
·手机结构设计指南之总体设计
·手机结构设计的一般准则
·手机锂离子电池保护电路原理分析
·手机中的连接器设计(二) SIM卡连接器
·智能手机:下一代嵌入式系统的界面
·使用ADS1.2进行嵌入式软件开发(上)
·精彩评论 HOT
·赞助商链接 SUPPORT
·相关文章 CORRELATION
·Symbian受全球经济冲击出货量放缓[5-21]
·Symbian中国招募人才欲捍卫智能手机霸主地位[4-9]
·Symbian突启在华扩张力图加大对微软优势[3-27]
·Symbian财报显示手机操作系统仍远领先微软[2-20]
·Symbian称2007年全球装机量7730万部[2-14]
·特别推荐 RECOMMEND
·评  论 COMMENT
推荐朋友 打印本页