首頁 > 技術文章 > Symbian > symbian 入門系列 -- document對象分析

symbian 入門系列 -- document對象分析

52RD.com 2005年6月3日 cysnew            評論:1條 查看 我來說兩句
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)

讀取...
相關報道
評 論
1樓 52RD網友 109.230.*.* 發表于 2011-11-24 11:42 回復
Now I'm like, well duh! Truly thanfukl for your help.
共有評論1篇 查看所有評論
文章導航 Navigation
精彩評論 Commentmore...
贊助商鏈接 Support
特別推薦 Recommend
内蒙古11选5走势图一定牛网