wince下应用程序使用外部字体实现多国语言

  定制wince平台支持多语言的系统,需在PB的local里添加对应的区域和语言编号。

如果只需在应用程序中实现多种语言和时区的切换,我们通常需要如下信息

 

定义如下结构体:

(封装每一种语言的属性)

struct
{
    int Index;              //语言索引号

    const TCHAR *name;      //语言名称 如:中文简体CHS 中文繁体CHT

    const TCHAR *alias;       //别名 (一般情况下可忽略)

    TCHAR LangName[12];  //UNICODE编码方式标记 如:中文 0x4e2d, 0x6587
    UINT CodePage;  //代码页 如936,950,437  此标记应用于字符编码转换
    int Charset;         //用于字体显示,如:GB2312_CHARSET  CHINESEBIG5_CHARSET
    TCHAR *TimeZoneKey;  //时区
} OEM_LANGUAGE[] =

    {

       //中文简体

       {0, 936, GB2312_CHARSET, _T("CHS"), NULL, {0x4e2d, 0x6587, 0},_T("China Standard Time") },  

      //中文繁体

      {1, 950, CHINESEBIG5_CHARSET, _T("CHT"),       NULL,{0x4e2d, 0x6587,0x7e41, 0x4f53,  0},_T("Taipei Standard Time")},

      ........ ,

      ........,

     }

    选定某种语言后,保存name,Charset,CodePage信息到注册表,方便所有应用程序调用。

 

添加字体:

  支持多语言的应用程序,需要有对应的字体文件,但字体文件过于庞大时,可以放在NAND FLASH或者外部存储卡上。当程序启动时,添加所有需要的字体文件,调用API函数:

    如:    AddFontResource(L"Storage Card//simsun.ttc");

 

创建字体:

根据语言类型和添加的字体信息得到 Charset值和FontFaceName字体名称

 如:Charset = GB2312_CHARSET,FontFaceName = L"Simsun";

       CreateFont创建简体中文字体

 

切换语言:

   1.得到所有语言种类的个数: num= sizeof(OEM_LANGUAGE) / sizeof(OEM_LANGUAGE[0])

   2.根据当前语言name或CodePage信息计算索引号Index,可以在num范围内向前或向后遍历。

   3.选定语言后,保存name,Charset,CodePage信息

   4.发送广播消息通知所有应用程序包括自己

       ::PostMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

       应用程序收到WM_FONTCHANGE后,创建新的字体

   5.设定系统时区(如果需要)
      

设定系统时区:

 struct REGTIMEZONEINFORMATION
 {
  LONG Bias;
  SYSTEMTIME StandardDate;
  LONG StandardBias;
  SYSTEMTIME DaylightDate;
  LONG DaylightBias;
 }rTZI;

 TIME_ZONE_INFORMATION   timezone; 

 

   读取注册表HKEY_LOCAL_MACHINE//Time Zones//+OEM_LANGUAGE.TimeZoneKey路径     "TZI"项信息到rTZI中。

    timezone.Bias = rTZI.Bias;
    timezone.StandardBias = rTZI.StandardBias;
    timezone.DaylightBias = rTZI.DaylightBias;
    timezone.StandardDate = rTZI.StandardDate;
    timezone.DaylightDate = rTZI.DaylightDate;

  保存timezone.StandardName值到 注册表项"Std"

  保存timezone.DaylightName 值到 注册表项"Dlt"

  调用API函数   SetTimeZoneInformation(&timezone);  

 结束。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值