一种程序界面文字换肤方法
2008-11-23 20:12
495 查看
一种程序界面文字换肤方法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就不可以了。但我们可以使用宏定义来达到此类目的,宏的定义与如下形式相似:
#define GET_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;
}
对于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就不可以了。但我们可以使用宏定义来达到此类目的,宏的定义与如下形式相似:
#define GET_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;
}
相关文章推荐
- 一种程序界面文字换肤方法
- 程序界面假死的一种解决方法 - 线程
- Android结束Activity退出程序的一种有效方法
- ubuntu 8.04 关闭x windows 启用文字界面的方法
- 一种基于ARM-Linux的FPGA程序加载方法
- 介绍一种好的设计方法——在软件设计前先画界面图
- Eclipse下导出java程序可执行的jar包图片无法显示问题的一种解决方法
- 当文字过长时裁剪(显示省略号或只裁剪 用CSS方法,不用程序)
- 一种动静态结合的Java程序异常处理优化方法
- IOS 程序内部切换语言 的一种方法
- iOS:界面适配(一)--Universal通用程序 iPhone、iPad适配(方法)
- Dynamics CRM 安装CRM程序系统检查界面报未将对象引用设置到对象的实例的解决方法
- 一种巧妙的删除程序自己的方法
- Qt程序主线程执行大量计算 界面卡顿,有什么方法优化?
- 一种巧妙的删除程序自己的方法
- 在linux下加载PHP扩展模块程序的一种方法!
- Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种
- Android结束Activity退出程序的一种有效方法
- 一种简单的方法在程序中实现透明效果(JAVA)(源代码)
- 本文给出了一种方便实用的解决大文件的读取、存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍