背景介绍:
俺的机器:win2k中文版 (windows 2000 5.00.2195)
+ bcb6
DWORD lcid3 = GetSystemDefaultLCID(); // ==> 2052
DWORD lcid4 = GetUserDefaultLCID(); // ==> 2052
LANGID langid3 = GetSystemDefaultLangID(); // ==> 2052
LANGID langid4 = GetUserDefaultLangID(); // ==> 2052问题1:RichEdit
char buf[20];
SendMessage( Handle_of_RichEdit, EM_GETSELTEXT, 0, (LPARAM) (LPSTR) buf); 此时,在RichEdit 输入的字符为 西欧语言字符 ,
被选中的两个字符是"\xF6\xE4"(德文字符,o上加两点,a上加两点)
但返回的却是 buf ="\x20\x20\x0" 问题2:TextOut
char buf[20];
buf[0] = '1';
buf[1] = 224; //此字符是 法文字符
LOGFONT lf2; memset (&lf2,0,sizeof(lf2));
lf2.lfHeight = 36;
lf2.lfWeight = FW_NORMAL;
lf2.lfCharSet = ANSI_CHARSET;
lf2.lfOutPrecision = OUT_DEFAULT_PRECIS;
lf2.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf2.lfQuality = DEFAULT_QUALITY;
lf2.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
strcpy(lf2.lfFaceName,"Arial"); HFONT hf = CreateFontIndirect(&lf2);
HDC hdc = GetDC ( hwnd); HFONT hfold = SelectObject(hdc,hf); TextOut(hdc, 20, 20, buf, 2 ); 屏幕上的显示结果, buf[1] 是 白板符号,(the \.notdef of the font).
外部解决方法:
俺在 Control Panel 将 系统默认语言 换到 "西欧和美国"后,问题不复存在。
但由于系统改动,有其他软件受到影响。可能的原因:
按ms 的解释,西欧语言是应该用 ANSI_CHARSET 的。 错误可能的原因是 win2k 将 ansi_charset 的 大于127的 字符
都解释为 中文,但中文需要 两字节, 在 解释为 中文 错误的 情况下,
显示出 白板字符 (它是字体内 用来显示所有 超出字符集的 字符的) 但 win2k中文版 不更改系统设置 是可以显示 西欧字符的,
例证就是 IE,以及 RichEdit。
而 RichEdit 似乎 是根据 系统默认语言 来响应 EM_GETSELTEXT.
如果它内部保留的是 unicode,若能将其内部unicode 直接读出 也不错,
俺一直找不到办法。求援:
各位大侠,俺给你们磕头了,救救俺吧。
俺的机器:win2k中文版 (windows 2000 5.00.2195)
+ bcb6
DWORD lcid3 = GetSystemDefaultLCID(); // ==> 2052
DWORD lcid4 = GetUserDefaultLCID(); // ==> 2052
LANGID langid3 = GetSystemDefaultLangID(); // ==> 2052
LANGID langid4 = GetUserDefaultLangID(); // ==> 2052问题1:RichEdit
char buf[20];
SendMessage( Handle_of_RichEdit, EM_GETSELTEXT, 0, (LPARAM) (LPSTR) buf); 此时,在RichEdit 输入的字符为 西欧语言字符 ,
被选中的两个字符是"\xF6\xE4"(德文字符,o上加两点,a上加两点)
但返回的却是 buf ="\x20\x20\x0" 问题2:TextOut
char buf[20];
buf[0] = '1';
buf[1] = 224; //此字符是 法文字符
LOGFONT lf2; memset (&lf2,0,sizeof(lf2));
lf2.lfHeight = 36;
lf2.lfWeight = FW_NORMAL;
lf2.lfCharSet = ANSI_CHARSET;
lf2.lfOutPrecision = OUT_DEFAULT_PRECIS;
lf2.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf2.lfQuality = DEFAULT_QUALITY;
lf2.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
strcpy(lf2.lfFaceName,"Arial"); HFONT hf = CreateFontIndirect(&lf2);
HDC hdc = GetDC ( hwnd); HFONT hfold = SelectObject(hdc,hf); TextOut(hdc, 20, 20, buf, 2 ); 屏幕上的显示结果, buf[1] 是 白板符号,(the \.notdef of the font).
外部解决方法:
俺在 Control Panel 将 系统默认语言 换到 "西欧和美国"后,问题不复存在。
但由于系统改动,有其他软件受到影响。可能的原因:
按ms 的解释,西欧语言是应该用 ANSI_CHARSET 的。 错误可能的原因是 win2k 将 ansi_charset 的 大于127的 字符
都解释为 中文,但中文需要 两字节, 在 解释为 中文 错误的 情况下,
显示出 白板字符 (它是字体内 用来显示所有 超出字符集的 字符的) 但 win2k中文版 不更改系统设置 是可以显示 西欧字符的,
例证就是 IE,以及 RichEdit。
而 RichEdit 似乎 是根据 系统默认语言 来响应 EM_GETSELTEXT.
如果它内部保留的是 unicode,若能将其内部unicode 直接读出 也不错,
俺一直找不到办法。求援:
各位大侠,俺给你们磕头了,救救俺吧。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货