C++實(shí)例(程序界面文字換膚方法)

字號(hào):

對(duì)于GUI程序,界面上會(huì)呈現(xiàn)許多圖片和文字信息。圖片一般都是運(yùn)行時(shí)從外部載入的,更換比較容易。然而,文字信息大多情況下都是直接寫在程序代碼中的。這種情況下,如果想更換文字,就需要重新編譯程序,非常不方便。這里介紹一種程序界面文字換膚方法,可以無(wú)須重新編譯程序而實(shí)現(xiàn)方便的文字換膚功能,可用于OEM或多語(yǔ)言情形。
    1、字典庫(kù)
    所有界面中呈現(xiàn)的文字都存儲(chǔ)在該典庫(kù)中,它是一個(gè)獨(dú)立于程序的文件。文件可以是純文本的、加密文本的、動(dòng)態(tài)鏈接庫(kù)或其他任何形式。程序運(yùn)行時(shí),從字典庫(kù)中讀取所需的文字信息。因此,當(dāng)需要修改相關(guān)界面文字時(shí),只需要修改字典庫(kù),然后發(fā)布即可,應(yīng)用程序不需要修改和重新編譯。例如app.dic:
    [app]
    APP_NAME=程序名
    APP_CAPTION=程序標(biāo)題
    APP_VERSION=程序版本
    APP_COPYRIGHT=程序版權(quán)
    2、字典庫(kù)訪問接口API
    這里的API主要只有一個(gè),即從字典庫(kù)中提取文字信息。函數(shù)原型可以如下:
    char *get_dictionary(char *dictionary, char *section, char *key);
    其中,dictionary是字典文件名;section是分節(jié)名,如上面的[app];key為指定的文字信息標(biāo)識(shí);返回值為字典庫(kù)中對(duì)應(yīng)的文字信息。至于具體實(shí)現(xiàn),可以根據(jù)實(shí)際情況而定。其實(shí),很多開發(fā)工具都提供了類似的API,我們只要在其基礎(chǔ)上作簡(jiǎn)單封裝即可。
    3、程序中調(diào)用
    程序中需要使用文字信息時(shí),直接調(diào)用get_dictionary()即可得到所需的文字??荚?大提示某些情況下需要使用常量形式的文字信息,比如初始化結(jié)構(gòu)或類時(shí)。這時(shí),使用API就不可以了。但我們可以使用宏定義來(lái)達(dá)到此類目的,宏的定義與如下形式相似:
    #define GET_DICTIONARY(key) get_dictionary("app.dic", "app", key)
    這樣,不管是常量還是變量字符串,我們都可以使用GET_DICTIONARY來(lái)給賦值。
    4、一個(gè)簡(jiǎn)單的例子
    /*
    * demo.dic
    */
    [demo]
    DEMO_ZH=這是一個(gè)演示
    DEMO_US=this is a demo
    /*
    * dict.h
    */
    #ifndef _DICT_H
    #define _DICT_H
    inline char *get_dictionary(char *dictionary, char *section, char *key)
    {
    //根據(jù)具體情況實(shí)現(xiàn)
    }
    #endif
    /*
    * demo.c
    */
    #include "dict.h"
    #define GET_DICTIONARY(key) get_dictionary("demo.dic", "demo", key)
    int main(int argc, char *argv[])
    {
    printf("%s\n", GET_DICTIONARY("DEMO_ZH"));
    printf("%s\n", GET_DICTIONARY("DEMO_US"));
    return 0;
    }