resource files 笔记
时间:2010-06-11 来源:freebendy
可以使用以下的C++预编译指令:
-
#define
-
#include
-
#ifdef
-
#ifndef
-
#if
-
#else
-
#endif
一般,resource(*.rss)文件会include以下头文件:
-
appinfo.rh
-
avkon.rh
-
avkon.rsg
-
eikon.rh
语法:
RESOURCE <STRUCT_NAME> | <resource_name> | { <resource-initialiser-list> }
-
<STRUCT_NAME> 资源头文件声明的结构体名
<STRUCT_NAME> 必须大写
-
resource_name 资源名称
resource_name 必须小写(编译的时候C++自动将其转换成大写).
-
resource-initialiser-list 初始化结构体中没有默认值的成员
如果定义了NAME变量(值为应用程序唯一),则它的定义语句必须出现在resource文件的开始,而且必须紧跟着以下的定义语句:
-
RESOURCE RSS_SIGNATURE
-
RESOURCE TBUF
-
RESOURCE TBUF RESOURCE EIK_APP_INFO
RSS_SIGNATURE 用于定义资源文件的版本号,RESOURCE RSS_SIGNATURE { signature = value },signature是LONG类型,默认值为0,如果使用默认值就定义一个空的结构体。
TBUF 定义一个被doucument类的StoreL和RestoreL方法使用的文件名,如果不需要调用这两个函数,则可以定义空结构。
RESOURCE TBUF { buf="NAME"; } // 一般buf值和NAME一致
TBUF在abdef.h中声明(被包含在uikon.h中)
EIK_APP_INFO 定义一个在应用程序UI使用的对象,不是所有成员都需要定义,参考语法:
RESOURCE EIK_APP_INFO
{
menubar = value2;
cba = value5;
status_pane = value6;
}
-
menubar 定义menubar资源
-
cba 定义softkeys资源
-
status_pane 定义status pane资源
成员的值应该是在recource文件或者recource文件包含的.rsg文件中定义,未被顶义的成员不要使用。
(包含在appinfo.rh)
RESOURCE LOCALISABLE_APP_INFO r_name36
{
short_caption = ""; //标题缩写,显示长度不够时使用
CAPTION_AND_ICON_INFO
{
caption = ""; // 完整标题
number_of_icons =0; //菜单使用的icon数目
icon_file = ""; //icon文件(包含路径但是不含盘符)
};
view_list[]; // VIEW_DATA
group_name(KAppMaxGroupName) = "";
}
*_reg.rss文件包含以下内容
UID2 KUidAppRegistrationResourceFile (都是相同的值)
UID3 <uid3 value for application>
RESOURCE APP_REGISTRATION_INFO { app_file = ""; //应用程式可执行文件名字,不包含扩展名 attributes = 0; localisable_resource_file = ""; // 程序本地化资源的文件路径和名称(不包含盘符) localisable_resource_id = r_name36; //在.rss文件中定义的LOCALISABLE_APP_INFO结构 hidden = KAppNotHidden; embeddability = KAppNotEmbeddable;//程序是否可嵌入 newfile = KAppDoesNotSupportNewFile;//说明程序是否给予文档以及是否支持新建文件(KAppDoesNotSupportNewFile默认值)
launch = KAppLaunchInForeground; group_name(KAppMaxGroupName) = ""; default_screen_number = 0; datatype_list[]; // SUPPORTED DATATYPES file_ownership_list[]; // FILE_OWNERSHIP_INFO service_list[]; // SERVICE_INFO opaque_data = 0; // use for opaque data to send to non-native application launchers i.e. MIDlet id }
*.hrh文件主要用于定义枚举,
-
自定义的command IDs
-
允许在C++代码引用dialog控制dialogs的control IDs
-
Application view IDs. Note that these could also be enumerated in the header files for the views.
-
IDs for other resource structures, such as for TABS in the status pane.
#include <eikon.rh>
#include <avkon.rh>
这两个文件包含了.rss文件使用的很多struct的定义
#include <avkon.rsg>
包含一些编译过的resources的IDs。
#include <appinfo.rh>
包含_reg.rss文件需要的和注册相关的struct。
详细资料:
C++ Developer's Library 1.4 -> Application Framework -> Managing resouce files
S60 5th Edition C++ Developer's Library -> Symbian Developer's Library v9.4 ->Symbian OS v9.4 -> Symbian OS Tools And Utilities -> Application resource tools reference