青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

franksunny的個人技術(shù)空間
獲得人生中的成功需要的專注與堅持不懈多過天才與機(jī)會。 ——C.W. Wendte

 

Symbian 資源文件解析

 

一、何為資源文件:

symbian應(yīng)用程序中,資源文件指的是后綴名為.rss的文件,每個應(yīng)用程序至少要有一個與之關(guān)聯(lián)的資源文件。資源編譯器rcomp編譯資源文件后,生成一個.rsc二進(jìn)制文件和一個相伴的頭文件(.rsg)。這樣在應(yīng)用程序框架啟動應(yīng)用程序時,會打開這個二進(jìn)制文件,借助在.rsg文件中創(chuàng)建的資源標(biāo)志符,根據(jù)需要把各個資源加載到C++代碼中。

 

二、資源文件的作用:

在資源文件中指定用戶界面的布局,如常用組件菜單、對話框、列表等在界面上的排列樣式,另外還可以在其中指定界面上用戶可見的文本信息。當(dāng)然,這些可見文本并不一定通過字符串在.rss資源文件中定義,我們一般在.loc本地文件中定義,而只需在.rss資源文件中將.loc本地文件引入(include)即可。(剛開始我百思不得其解,真不知道程序終相關(guān)的字符串定義在哪里的)

 

三、資源文件的結(jié)構(gòu)(語法):

資源文件的具體結(jié)構(gòu)由兩部分構(gòu)成,分別稱為頭部和主體。

1、頭部:主要包括五部分,分別是文件名字、include包含語句、簽名、文檔名緩沖、應(yīng)用程序信息資源這些些資源文件標(biāo)準(zhǔn)信息。

1)名字:用NAME語句定義,該語句必須是資源文件中第一個有意義的行(注釋和空白語句不在有意義行定義內(nèi)),即這條語句要位于include包含語句之前,后面沒有分號。該語句指定一個由14個字符組成的名字,并建議使用大寫字符。如果應(yīng)用程序使用了多個資源文件的話,那么可以通過它進(jìn)行區(qū)分。如:NAME HELL

2include包含語句:允許使用其他地方定義的符號和結(jié)構(gòu)。常見的有uikon.rheikon.rhavkon.rh

3)簽名:它的內(nèi)容實際上被忽略,但必須有這條語句,否則加載資源時便報錯。一般將實際內(nèi)容置為空,如:RESOURCE RSS_SIGNATURE { } ,后面沒有分號。

4)文檔名緩沖:指定應(yīng)用程序默認(rèn)文檔名的TBUF資源。大部分程序不使用文檔,但仍然必須包含此資源,否則加載資源失敗。不需指定文件的擴(kuò)展名,因為S60本地文檔不使用擴(kuò)展名。如:RESOURCE TBUF { buffer=”HelloWorld”;}

在這里的文件名將作為參數(shù)傳遞給CAknDocument類的OpenFileL(TBool aDoOpen, const TDesC& aFilename, RFs& aFs)方法。這允許一個應(yīng)用程序在運行時打開一個默認(rèn)的文檔。如果這里的值為空那么程序默認(rèn)文檔名和應(yīng)用程序名一致。

5)應(yīng)用程序信息資源:這個資源比較重要。EIK_APP_INFO資源為應(yīng)用程序指定各種標(biāo)準(zhǔn)控件。如狀態(tài)面板等,通常會創(chuàng)建一個為狀態(tài)面板指定新內(nèi)容的資源,然后使用EIK_APP_INFO資源的status_pane字段引用它。如:

RESOURCE EIK_APP_INFO

{

        hotkeys = r_HelloWorld_hotkeys;

        menubar = r_HelloWorld_menubar;

        cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;

 }

注意:頭部中定義的各種資源都沒有資源名。

 

2、主體

主體部分主要定義了應(yīng)用程序中將要使用的各種資源。

它的一般定義格式如下:

RESOURCE STRUCTNAME resource-name

{

    resource-initializer-list

}

在這里STRUCTNAME應(yīng)替換為具體的資源結(jié)構(gòu)類型,而這些資源結(jié)構(gòu)類型已在文件頭部include包含的eikon.rhuikon.rhavkon.rh中進(jìn)行了定義。

資源名resource-name必須小寫,通常以r_開頭,而在C++文件中使用他們時必須大寫,這和資源編譯器工作方式有關(guān)。例如:

//資源名定義

RESOURCE AVKON_VIEW r_viewmychannelhot

{

    hotkeys=r_xv_hotkeys;

    menubar=r_menubar_viewmychannelhot;

    cba=R_AVKON_SOFTKEYS_SELECTION_LIST;

}

//資源調(diào)用

BaseConstructL(R_VIEWMYCHANNELHOT);

下面具體研究resource-initializer-list(初始化資源字段),根據(jù)要資源字段的不同類型,初始化字段有三種不同方式:簡單初始化器、數(shù)組初始化器、結(jié)構(gòu)初始化器。如下:

RESOURCE STRUCT r_my_example_struct

{

    simple=EeikCtLabel;  //簡單初始化器,分配單個值或字符串

    array={1,2,3};             //數(shù)組初始化器,大括號,元素用逗號隔開

    structmember=OTHERSTRUCT   //結(jié)構(gòu)初始化器,編譯器不進(jìn)行類型檢查,要小心

{

     simple1=”hello”;

     simple2=”goodbye”;

}

}

由以上示例可知:

簡單初始化器:為字段分配單個值或字符串;

數(shù)組初始化器:為數(shù)組字段分配單個或多個值,格式用大括號括起,其中元素用逗號隔開;

結(jié)構(gòu)初始化器:為結(jié)構(gòu)字段分配單個或多個值。首先初始化時需要提供結(jié)構(gòu)名,而后指定結(jié)構(gòu)每個字段;其次資源編譯器不進(jìn)行類型檢查,所哦一設(shè)定值時必須與結(jié)構(gòu)字段相應(yīng)類型一致,否則編譯能通過但是運行會出錯。

 

由于采用不同的控件時,其采用的資源字段各不相同,所以先分析三類具體的資源定義,具體控件的資源定義,放在具體控件中闡述。

1)字符串資源:

可以使用TBUF資源將字符串包含在資源文件中。通常,會在一個.loc文件中或是在指定語言的.lxx文件中定義字符串文字,而不是在.rss文件中定義它們,只需在.rss文件中將.loc文件包含進(jìn)來即可。

.lxx文件中的xx應(yīng)該替換為e32std.h中的Tlanguage枚舉定義的兩位數(shù)字區(qū)域設(shè)置碼,之后按照.mmp項目文件中設(shè)置的當(dāng)前生成區(qū)域設(shè)置把.lxx文件包含到.loc文件中。看一個定義了.lxx文件的.loc文件實例:

#ifdef LANGUAGE_01

#include “MyApp.101”

#endif

#ifdef LANGUAGE_02

#include “MyApp.l02”

#endif

最后,.101.102文件以各自的語言定義字符串,比如:

#define  STR_HELL0   “Hello World”

為了確保編譯資源時將使用正確的字符串,應(yīng)該在.mmp文件中包含一行或多行LANG語句,導(dǎo)致生成兩個二進(jìn)制資源文件:.r01.r02

LANG 01

LANG 02

2)標(biāo)點:介紹如何使用標(biāo)點符號

a、所有賦值語句之后都應(yīng)該有分號

b、列表中的元素以逗號分隔

c、資源定義后以及列表中最后一個元素之后不應(yīng)有分號

舉例:

RESOURCE AVKON_VIEW r_myapp_view

{

    menubar=r_myapp_menubar;//賦值語句后有分號

    cba=r_myapp_cba;//賦值,需要分號

}  //資源定義結(jié)尾,無需分號

RESOURCE TAB_GROUP r_myapp_tabgroup

{

    tab_width=EaknTabWidthWithTwoTabs;

    active = 0;

    tabs =

        {

            TAB   //列表中的第一個TAB STRUCT

            {

                id = EnavigationPaneTab1;

                txt = TAB1_TEXT;

             },   //列表元素之間用逗號分隔

            TAB

             {

                 id = EnavigationPaneTab2;

                 txt = TAB2_TEXT;

              }   //列表結(jié)尾無需分號

          };       //將列表賦值給tabs,需要分號。

}

3)創(chuàng)建資源結(jié)構(gòu):

RESOURCE語句用于創(chuàng)建特定資源的實例,而STRUCT語句則用于定義資源類型,創(chuàng)建的所有STRUCT定義都應(yīng)該保存在一個擴(kuò)展名為.rh的文件中。(從這里顯然我們可以試著去打開eikon.rhuikon.rhavkon.rh文件看看,里面是否都是STRUCT打頭的資源類型定義)

常用STRUCT字段類型見資源文件STRUCT字段類型表。,除簡單字段外,還可以把字段定義為一個由相同類型的值組成的數(shù)組,在字段名后添加一對方括號即可。如:

STRUCT MENU_PANE

{

       STRUCT items[ ];

       LLINK extension=0;

}

 

常用資源字段類型

字段類型

說明

BYTE

單字節(jié),解釋為一個有符號或無符號整數(shù)

WORD

雙字節(jié),解釋為一個有符號或無符號整數(shù)

LONG

四字節(jié),解釋為一個有符號或無符號整數(shù)

DOUBLE

八字節(jié),表示一個雙精度浮點數(shù)

TEXT

NULL結(jié)尾的字符串,已廢棄,建議使用LTEXT

LTEXT

Unicode字符串,帶有一個前導(dǎo)字節(jié)保存長度,沒有終止NULL

BUF

Unicode字符串,沒有前導(dǎo)字節(jié),沒有終止NULL

BUF8

8位字符組成的字符串,沒前導(dǎo)和終止,用于放入8位數(shù)據(jù)

BUF<n>

最大長度為nUnicode字符串,沒有前導(dǎo)和終止

LINK

另一個資源的16ID,類似于擁有指定資源的一個引用

LLINK

另一個資源的32ID

SRLINK

自引用LINK,該類型字段值由資源編譯器自動分配,不能自行提供初始化值,是一個32ID

STRUCT

結(jié)構(gòu),創(chuàng)建本身就是STRUCT的字段,使用它可以把STRUCT嵌入到STRUCT

STRUCT的類型名字必須都大寫,不能含有空格,且以字母字符開始;在具體每個字段的定義時,依次由字段類型、字段名、可選初始值和一個分號組成。類型必須全部大寫,字段名必須小寫,如果提供默認(rèn)值,則在資源定義中使用此類型資源結(jié)構(gòu)是可以省略該字段,此時將使用默認(rèn)值。

 

三、與資源文件有關(guān)的系統(tǒng)頭文件及其他文件:

如上提到的與資源文件相關(guān)的*.rh*.loc*.*.rsg之外,在資源文件中,往往還會引入其它諸如*.hrh*.mbg文件,由于這是本人第一篇關(guān)于Symbian的小結(jié),所以在這里借資源文件的解析順帶將其它文件也小結(jié)一下:

*.h*.cpp是最基礎(chǔ)的C++頭文件和C++源文件(這個不用做介紹都知道);

*.rssSymbian的資源源文件,主要定義資源實例,具體定義了應(yīng)用程序UI所需所有字符串、按鍵、菜單和列表等等控件資源,在Series 60以后,將字符串的具體定義放在了*.loc文件中,更有益于UI本地化和國際化,另據(jù)文檔說明,*.rss可以擴(kuò)展為*.r??用于多國語言版本;

*.rhSymbian的資源頭文件,負(fù)責(zé)資源結(jié)構(gòu)類型的定義,除了預(yù)處理語句外就是STRUCT語句,它只能被資源源文件包含;

*.hrh是可以被C++文件(包括頭文件和源文件)和Symbian資源文件(包括*.rss*.rh)包含的頭文件,其內(nèi)基本是預(yù)處理語句和enum枚舉語句,這些枚舉語句往往是菜單、工具條等的命令索引值,在switchcase語句中使用;

*.rsc文件是*.rss文件編譯生成的資源(二進(jìn)制)文件,在資源源文件編譯過程中還會產(chǎn)生*.rsg文件,該文件內(nèi)是*.rss資源源文件中資源的ID值,C++源文件包含它后可以通過資源ID直接裝載資源。

與資源相關(guān)的還有*.mbg文件,它和*.rsg一樣是編譯生成的ID文件,具體實現(xiàn)通常在*.mmp(后面介紹)文件中將各種Window bmp位圖包含進(jìn)來,通過編譯生成*.mbm的過程中產(chǎn)生(該過程可能調(diào)用了aifbuilder這一圖標(biāo)設(shè)計工具)。而*.mbmSymbian系統(tǒng)的圖像文件。在這里只要對照rsc文件的過程就行,只不過mbmUI的圖形和圖像資源。(這里至于換膚和aifbuilder的一些東西,我還不是很清楚,為此沒做展開)

*.inl文件是內(nèi)聯(lián)函數(shù)的源文件,通常內(nèi)聯(lián)函數(shù)在C++頭文件中實現(xiàn),但有時為了考慮將其實現(xiàn)與頭文件分離,故意在另一文件中實現(xiàn),通常它在聲明內(nèi)聯(lián)函數(shù)的頭文件的末尾被#include語句包含進(jìn)來。

*.pan文件是為應(yīng)用程序創(chuàng)建一份應(yīng)急代碼,字面意思應(yīng)急代碼在開發(fā)過程中顯示程序的錯誤用的,但是具體我也沒有用到過,所以也不知道如何解釋更好些。

*.aif的文件,查到說是Symbian系統(tǒng)的應(yīng)用程序信息文件,Aif文件的主要作用是在目標(biāo)設(shè)備的菜單中顯示圖標(biāo)由專門的aiftool應(yīng)用程序產(chǎn)生,也跟本地化有關(guān)。

 

構(gòu)建文件*.mmp是為控制臺應(yīng)用程序abld準(zhǔn)備的項目定義文件,其功能類似makefile,但是它可能比makefile還復(fù)雜,因為Symbian構(gòu)建工具在mmp文件基礎(chǔ)上才能產(chǎn)生makefile文件,具體項目定義文件的格式后面再另作解析。

構(gòu)建文件bld.inf是構(gòu)建時的信息文件,通常其內(nèi)只有一個*.mmp用于指向要編譯的項目定義文件,但是也可以包含多個*.mmp,具體多個時我試過,只要路徑設(shè)置正確就可以實現(xiàn)。

根據(jù)不同的構(gòu)建目的,執(zhí)行abld命令將產(chǎn)生各種不同的目標(biāo)文件,具體由:*.appSymbian的系統(tǒng)執(zhí)行文件相當(dāng)于Windowsexe文件,它是多態(tài)的DLL)、*.dll(共享的dll文件)、*.exeSymbian系統(tǒng)服務(wù)或可執(zhí)行文件,我將其理解為控制臺程序,不知道是否正確,該文件在Window上裝有模擬器情況下可以自動運行模擬器)。

打包文件*.pkg文件,該文件是為控制臺應(yīng)用程序makesis準(zhǔn)備用來生成*.sis手機(jī)安裝文件的的定義文件,其語法比較簡單,在這里不做展開。

 

既然對文件已經(jīng)做了如上分析,那么順其自然對常見的文件目錄也用下表列出做下簡單描述

文件夾

內(nèi)容描述

\aif

存放*.aif*.aif的源位圖(*.bmp

\data

用于產(chǎn)生*.src*.rss資源源文件

\group

與平臺無關(guān)的項目文件如*.mmp*.inf有時也放*.rss

\inc

*.h*.loc*.l***.pan*.hrh等能被#include””包含的文件

\install

*.pkg和隨后生成的安裝文件*.sis

\src

*.cpp類的C++源文件

 

 

另:本篇小結(jié)參考了Series 60應(yīng)用程序開發(fā) 周良忠譯 (雖然人郵的書口碑不好,但是單位有就拿來翻著做參考慮了)

網(wǎng)絡(luò)上一些文章,下面給出原始鏈接

文件類型和相互依賴http://www.newlc.com/article.php3?id_article=85

資源文件淺析http://www.sf.org.cn/Article/symbiandev/200607/18832.html

從資源文件讀取常量http://www.sf.org.cn/Article/lumen/200603/17269.html

應(yīng)用資源文件介紹http://www.sf.org.cn/Article/symbiandev/200509/209.html

 

posted on 2007-09-19 17:30 frank.sunny 閱讀(2414) 評論(0)  編輯 收藏 引用 所屬分類: symbian 開發(fā)

常用鏈接

留言簿(13)

隨筆分類

個人其它博客

基礎(chǔ)知識鏈接

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产99国产精品| 亚洲国产精品va在看黑人| 一区二区三区免费看| 美女任你摸久久| 麻豆精品网站| 欧美福利一区二区| 亚洲免费久久| 亚洲欧美国产一区二区三区| 亚洲尤物在线| 久久亚洲一区二区| 欧美女人交a| 国产精品福利在线观看| 国产欧美一区二区在线观看| 狠狠色综合日日| 亚洲美女视频在线观看| 亚洲一二三区在线| 久久久www免费人成黑人精品| 狂野欧美激情性xxxx欧美| 亚洲第一色在线| 最新亚洲电影| 欧美伊人久久| 欧美黄色影院| 国产婷婷色一区二区三区| 亚洲第一精品影视| 亚洲一区二区在线播放| 麻豆精品精品国产自在97香蕉| 亚洲精品乱码久久久久| 欧美影院久久久| 欧美日韩亚洲一区在线观看| 国内精品伊人久久久久av一坑| 日韩视频一区二区三区在线播放免费观看 | 亚洲国产成人在线播放| 一区二区三区久久网| 久久理论片午夜琪琪电影网| 欧美成年人视频网站| 亚洲最新视频在线播放| 久久精品91久久香蕉加勒比| 欧美日本免费| 亚洲国产欧美日韩| 久久av一区二区三区亚洲| 91久久综合| 久久九九全国免费精品观看| 国产精品久久久久三级| 亚洲人成在线观看网站高清| 久久精品盗摄| 亚洲婷婷在线| 欧美视频一区二区三区…| 亚洲精品国产拍免费91在线| 快she精品国产999| 久久超碰97人人做人人爱| 国产精品久久久久久久久动漫| 亚洲人成人99网站| 欧美大胆a视频| 久久久精品久久久久| 国模私拍视频一区| 久久久精品国产免费观看同学| 中文亚洲免费| 国产精品精品视频| 午夜精品福利一区二区蜜股av| 亚洲人成高清| 欧美日韩1区2区3区| 日韩视频免费在线观看| 亚洲三级国产| 欧美日本韩国一区| 亚洲性感激情| 亚洲色图综合久久| 国产精品永久免费观看| 欧美一区二区在线看| 亚洲欧美精品在线| 国产午夜亚洲精品理论片色戒| 久久国产精品久久久久久久久久| 亚洲女人天堂av| 国产一区二区三区在线免费观看| 久久爱www| 久久久亚洲午夜电影| 91久久久国产精品| 9色精品在线| 亚洲人成在线播放| 欧美激情第二页| 亚洲最新视频在线| 亚洲视频一区在线观看| 国产精品中文在线| 女主播福利一区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产精品白丝av嫩草影院| 99精品欧美一区二区三区| 亚洲国产精品专区久久 | 国产亚洲欧美激情| 久久亚洲综合色| 欧美多人爱爱视频网站| 亚洲性av在线| 久久精品国产久精国产思思| 日韩西西人体444www| 亚洲影院色在线观看免费| 黑人巨大精品欧美黑白配亚洲| 欧美肥婆在线| 国产精品午夜久久| 欧美国产专区| 国产欧美一区二区视频| 亚洲高清自拍| 国产一区二区精品久久99| 亚洲国产天堂久久国产91| 国产美女精品视频| 亚洲黄色高清| 国产一级揄自揄精品视频| 亚洲国产日韩一区二区| 国产欧美日本| 99成人精品| 亚洲国产欧美一区二区三区久久 | 亚洲一区二区在| 亚洲高清免费视频| 午夜精品剧场| 夜夜嗨网站十八久久| 久久成人精品视频| 亚洲欧美日韩在线不卡| 欧美精品久久久久a| 久久综合五月天婷婷伊人| 国产精品久久999| 亚洲欧洲日本一区二区三区| 在线观看视频欧美| 欧美一区三区二区在线观看| 亚洲欧美国产制服动漫| 欧美精品一区二区精品网 | 亚洲电影免费| 亚洲电影激情视频网站| 欧美一区二区三区四区在线| 亚洲欧美中文日韩v在线观看| 欧美日韩国产一级| 亚洲激情成人在线| 亚洲精品视频在线| 欧美91视频| 亚洲成色最大综合在线| 亚洲狠狠丁香婷婷综合久久久| 久久精品主播| 久久免费少妇高潮久久精品99| 国产伦精品一区二区三区免费| 一本久久知道综合久久| 亚洲视频免费在线| 欧美日韩一区二区三区在线观看免| 亚洲电影免费在线| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美成人亚洲成人| 黄色在线成人| 久久精品日韩| 牛牛精品成人免费视频| 精品电影一区| 久久久夜夜夜| 欧美国产亚洲精品久久久8v| 最近看过的日韩成人| 欧美va天堂| 99精品欧美一区二区蜜桃免费| 亚洲桃花岛网站| 国产精品专区h在线观看| 欧美中文字幕第一页| 麻豆9191精品国产| 亚洲精品一区二区在线观看| 欧美大片在线观看| 99视频精品全国免费| 久久国产精品72免费观看| 激情视频一区二区三区| 免费试看一区| 亚洲色图在线视频| 久久一区中文字幕| 日韩午夜电影| 国产欧美一区二区三区国产幕精品 | 国产日韩精品一区| 久久久噜噜噜| 亚洲精品午夜| 久久久久九九九九| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美高清不卡| 亚洲一区三区电影在线观看| 久久在线免费观看| 中国成人亚色综合网站| 国产一区二区三区在线观看免费| 久久永久免费| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久乐国产精品| 亚洲性色视频| 亚洲人体影院| 韩国精品久久久999| 欧美日韩中文在线| 久久资源av| 亚洲欧美制服另类日韩| 亚洲日本va在线观看| 久久一区二区视频| 午夜激情综合网| 99re6这里只有精品| 国产日韩欧美在线| 欧美少妇一区| 欧美激情视频一区二区三区在线播放| 亚洲欧美日韩精品| 一本色道久久88综合亚洲精品ⅰ| 美女免费视频一区| 久久精品二区三区| 欧美一区二区三区啪啪| 日韩小视频在线观看专区| 欧美日韩视频在线| 亚洲精品欧洲精品| 欧美激情在线狂野欧美精品|