环境:win2k中文版本, ie6, vc6.0
系统语言:朝鲜语、西里尔文、日语、中文简体(默认)
区域设置:中文(中国)我现在是根据RichEdit中的多国语言来绘制文字的,即先用CRichEditCtrl::GetSelectionCharFormat(cf)读字体信息,根据CHARFORMAT cf创建字体CFont对象,选入DC, 调用CDC::DrawText()绘制文字。CHARFORMAT cf创建字体CFont对象的部分代码:
CFont* g_CreateFontFrom(const CHARFORMAT& cf)
{
CFont *pNewFont = new CFont;
if (pNewFont == NULL)
{
return NULL;
}
LOGFONT lf;
memset(&lf, 0, sizeof(lf));
lf.lfHeight = -labs(cf.yHeight / 20 ); //ください --日文
//3ㅏㅓㅏ마마--韩文
//Эксперты и ученые --俄文
lf.lfCharSet = cf.bCharSet;//DEFAULT_CHARSET;//HANGEUL_CHARSET;//JOHAB_CHARSET;//ANSI_CHARSET;//cf.bCharSet;//GB2312_CHARSET;//;
lf.lfOutPrecision = OUT_TT_PRECIS;//OUT_CHARACTER_PRECIS;
lf.lfPitchAndFamily  = cf.bPitchAndFamily ; strcpy(lf.lfFaceName, cf.szFaceName);
...
return pNewFont;
}
这样做只能正常绘制中文,无法正确绘制韩文、日文、俄文(西里尔文)。开始我怀疑是字符集的问题,用CHARFORMAT cf创建LOGFONT字体时,我将.lfCharSet这一行代码改为:
lf.lfCharSet = DEFAULT_CHARSET;
这一改,俄文和日文可以正常显示,但韩文仍然不正常。
我最后在windows的区域设置将系统默认语言改为"朝鲜语",重启机器,这回韩文在VC6.0的编辑器中能正常显示了,DrawText也可正常绘制韩、俄文,但可怜的是中、日文有少部分字符不正常了,如中文的"热"绘制成'?', 日文的“訳”绘制成“?”这里感觉困惑的地方是,
A、为什么在绘制俄文时, CharSet用RUSSIAN_CHARSET不能正常显示,反而要用DEFAULT_CHARSET? B、用DEFAULT_CHARSET可正常显示俄文和日文,却对韩文无效?C、为什么RichEdit控件显示俄、日、韩文都没有问题呢?(如果是记事本的话要将字体改为非Arial字体 , 如宋体或Tahoma才能正常显示)D、为什么VC6.0在windows系统默认语言为“中文简体”时可正常显示俄文和日文,却无法正常显示韩文?默认语言为“朝鲜语”时可正常显示韩文,而中文、日、俄文都不行?附外文:
日文:
申し訳ございませんが、 このまえウイルスの為、がサイトが中止状態になっていた
俄文:
Эксперты и ученые, работающие в научно-исследовательских центрах Корпорации, содействуют успеху операторов связи и 
韩文:
ㅁㄴㅇ ㄴㅇㄹ ㄴㅇㄹ3ㅏㅓㅏ마마 ㄹㄴㅁ아럼ㄴㅇ람ㄴㅇ

解决方案 »

  1.   

    要显示多国语言,要用Unicode编程。
      

  2.   

    lf.lfCharSet = DEFAULT_CHARSET;
    不够,还要指定具体的字体名字。一般的中文字体都能显示俄文和日文假名,但是对于日文汉字、韩文就无能为力了。
      

  3.   

    Unicode.
    系统中安装相应语言的支持文件吗?
      

  4.   

    考虑过unicode,但最初程序不是按unicode写,改动很大,还要测试,时间来不及。
    to pomelowu(羽战士)和goodboyws(深夜不眠者) :
    字体绝对取对了,因为这是从richEdit中取的,不然richedit也显示不对。to DentistryDoctor(My heart will fly,in the sky.):
    windows的区域设置-系统语言设置中加了相应的语言并重启机器还不够吗?
    我有一段调试项目代码(不到100k),谁有兴趣帮我试试,留下mail,谢了.
      

  5.   

    用MS的Application Locale运行看看结果~~
      

  6.   

    pomelowu(羽战士):
    请告知你的mail,发到我的邮箱:surs2002 at msn dot com,谢谢!