原创 Mstar之RS文件分析

2011-3-4 11:12 4038 5 5 分类: 软件与OS

注:个人理解所书,有误请指出,转载注明出处。

       在每个App底下都有一个res文件夹。这些文件的主要功能是将UI layout从程序中分离,变更的时候无需更改代码。

       这些文件的自动生成应该是源自EMMI Studio。不过我还没用过EMMI Studio来进行开发,一般都是直接手动进行修改。(具体的是否如此,就该问问Mstar官方说法了)

       下面以AlarmApp()为例分析一下RS文件的内容。

 

ApBegin(QvgaP,CLSID_ALARMAPP)

       WndBegin(ALARM_WND_SETALARM)

              WndSetAllSoftkeyRC({SK_SAVE, SK_OK, SK_CANCEL})………………①

        WndSetTitleRC({IMG_NULL_ID,TXT_LTL_N_EDIT_ALARM})

        WdgBegin(CLSID_DOUBLE_TEXT_WIDGET,TitleDoubleTextWidget)

WdgDoubleItemCreateForWndRC({{0,0},{0,0},DOUBLEITEM_STYLE_DOUBLE_TEXT})

            WdgDoubleItemDBTextSetDataByIDRC({TXT_LIL_N_TITLE,TXT_NULL_ID})

        WdgEnd(CLSID_DOUBLE_TEXT_WIDGET,TitleDoubleTextWidget)

       WndEnd(ALARM_WND_SETALARM)

ApEnd(QvgaP,CLSID_ALARMAPP)

 

ApBegin和ApEnd有两个参数,第一个是指ThemeID,主要是在有多个Theme时用来做切换theme的判断。第二个参数很明显,就是对应AP的CLSID了。加载资源的时候,会根据所提供的AP CLSID及Window ID从资源中得到对应窗口的内容。

WndBegin/ WndEnd里的参数是指对应窗口的ID号,这个ID好一般都定义在对应AP的头文件中,如闹铃的是在Mmi_alarmapp_id.h。在一个App中可以定义多个窗口,窗口中又可以定义多个Widget。在程序中Load资源时,变量的数据类型ALARM_WND_SETALARM_t,这个东东又是怎么生成的呢?

这个数据结构是根据用户定义的窗口ID动态生成的。别急!

       在窗体内部就是诸如左右软键,标题,Widget等的layout了。在标号一中设置了左软键功能为保持,Action键为确定,右软键为返回。WndSetAllSoftkeyRC里面的参数在mmi_macro_prop_def.h中可以查看:

#define  WndSetAllSoftkeyRC(...)  PropIDDefine( nAllSkID)  AllSoftkeyVar_t   tAllSk;

AllSoftkeyVar_t这个结构定义在mmi_common_wdgvar.h。具体为

 

typedef struct

{

    u32 nLeftSKID;

    u32 nMiddleSKID;

    u32 nRightSKID;

}AllSoftkeyVar_t;

 

以下是在代码中的调用

ALARM_WND_SETALARM_t *pVar = LoadRC(CLSID_ALARMAPP,ALARM_WND_SETALARM);

WndSetAllSoftkey(hWin, pVar->tAllSk.nLeftSKID,pVar->tAllSk.nMiddleSKID,pVar->tAllSk.nRightSKID);

 

从颜色上我想你应该很清楚知道他们的对应关系了。

WdgBegin/ WdgEnd,参数一,widget ID,参数二,widget的名称。Widget里的写法和结构都可以像左右软键那样找到。

       从上面不难看出,通过WND_ID生成的结构WND_ID_t其实就是内部所有用到的结构的一个打包。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条