如何设置Unicode控件的字体?

问题描述:

要设置ANSI控件的字体,我创建一个HFONT对象并将它发送(通过SendMessage())到控件。这就是我的箱子对象HFONT如何设置Unicode控件的字体?

HFONT hFont = CreateFont(13, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Tahoma"); 

我相信,所有的参数都为除第9参数为Unicode控制相同。对于ANSI控件,此参数为ANSI_CHARSET,但Unicode控件应该如何?

+0

@moffeltje - '的CreateFont()'适用于C作为好就像在C++中一样,所以是的,这似乎与C有关。 – ryyker 2015-03-31 14:01:00

+0

在过去的二十年中,字符集已经不相关,只需使用DEFAULT_CHARSET。 – 2015-03-31 15:01:39

+0

@Hans Passant我应该为ANSI控件还是Unicode控件使用'DEFAULT_CHARSET'? – user4582812 2015-03-31 15:09:12

This link讨论了Unicode以及如何使用它来实现代码。首要的要求是#定义UNICODE,以便通用Windows API将解析为UNICODE版本。
在你的榜样,您做出声明:
我相信,所有的参数都为除第9参数一个Unicode控制相同。
不正确作为最后一个参数必须是Unicode字符串。

在你的代码示例,请执行下列操作:

#define UNICODE //place in project visible .h file 

变化:

HFONT hFont = CreateFont(13, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Tahoma"); 

要:

HFONT hFont = CreateFont(13, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Tahoma"); 
                     ^^^^^^^^^^^^                      ^^^^^^^^ 

MSDN这里是预定义的LIS吨的功能CreateFont()使用(注意DEFAULT_CHARSET):

网站可能会有所帮助:Programming with Unicode

+0

我问过这个问题,因为我不知道应该为Unicode控件选择什么值。 – user4582812 2015-03-31 14:11:38

+0

是不是所有不是第一个(ANSI),Unicode? – moffeltje 2015-03-31 14:15:11

+0

DEFAULT_CHARSET(进一步在列表中下)被设置为基于当前系统区域设置的值。例如,当系统区域设置是英语(美国)时,它被设置为ANSI_CHARSET。如果它被设置为另一个国籍,它将适应。你尝试过吗? *** [这是一个对话](http://microsoft.public.win32.programmer.international.narkive.com/5Tt3tPkw/createfont-for-unicode)***可能有所帮助。 – ryyker 2015-03-31 14:15:41