一種程式介面文字換膚方法Aiguille.LIU2008-11-23 對於GUI程式,介面上會呈現許多圖片和文字資訊。圖片一般都是運行時從外部載入的,更換比較容易。然而,文字資訊大多情況下都是直接寫在程式碼中的。這種情況下,如果想更換文字,就需要重新編譯器,非常不方便。這裡介紹一種程式介面文字換膚方法,可以無須重新編譯器而實現方便的文字換膚功能,可用於OEM或多語言情形。1、字典庫 所有介面中呈現的文字都儲存在該典庫中,它是一個獨立於程式的檔案。檔案可以是純文字的、加密文本的、動態連結程式庫或其他任何形式。程式運行時,從字典庫中讀取所需的文字資訊。因此,當需要修改相關介面文字時,只需要修改字典庫,然後發布即可,應用程式不需要修改和重新編譯。例如app.dic:[app]APP_NAME=程式名APP_CAPTION=程式標題APP_VERSION=程式版本APP_COPYRIGHT=程式著作權2、字典庫提供者API 這裡的API主要只有一個,即從字典庫中提取文字資訊。函數原型可以如下:char *get_dictionary(char *dictionary, char *section, char *key); 其中,dictionary是字典檔案名稱;section是分節名,如上面的[app];key為指定的文字資訊標識;傳回值為字典庫中對應的文字資訊。至於具體實現,可以根據實際情況而定。其實,很多開發工具都提供了類似的API,我們只要在其基礎上作簡單封裝即可。 3、程式中調用 程式中需要使用文字資訊時,直接調用get_dictionary()即可得到所需的文字。然而,某些情況下需要使用常量形式的文字資訊,比如初始化結構或類時。這時,使用API就不可以了。但我們可以使用宏定義來達到此類目的,宏的定義與如下形式相似:#defineGET_DICTIONARY(key)get_dictionary("app.dic", "app", key) 這樣,不管是常量還是變數字串,我們都可以使用GET_DICTIONARY來給賦值。4、一個簡單的例子
- /*
- * demo.dic
- */
- [demo]
- DEMO_ZH=這是一個示範
- DEMO_US=this is a demo
- /*
- * dict.h
- */
- #ifndef _DICT_H
- #define _DICT_H
- inline char *get_dictionary(char *dictionary, char *section, char *key)
- {
- //根據具體情況實現
- }
- #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;
- }