Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Windows API选择粗体字体_C++_Windows_Fonts_Gdi_Uniscribe - Fatal编程技术网

C++ Windows API选择粗体字体

C++ Windows API选择粗体字体,c++,windows,fonts,gdi,uniscribe,C++,Windows,Fonts,Gdi,Uniscribe,我正在尝试编写一些代码来选择粗体字体(我实际上希望获得要发送到跨平台字体渲染器的字体文件名,但这不太相关)。我使用CreateFont()将cWeight设置为FW_BOLD,pszFaceName设置为“Arial”。我将此字体选择到DC中,并使用GetTextFace()检查实际选择的字体。结果是Arial。我很惊讶,字体不是Arial粗体,这是一个具有不同字体文件的单独的面。指定Arial粗体字体的唯一方法是将pszFaceName设置为“Arial粗体”。不幸的是,仅仅在字体名称的末尾加

我正在尝试编写一些代码来选择粗体字体(我实际上希望获得要发送到跨平台字体渲染器的字体文件名,但这不太相关)。我使用CreateFont()将cWeight设置为FW_BOLD,pszFaceName设置为“Arial”。我将此字体选择到DC中,并使用GetTextFace()检查实际选择的字体。结果是Arial。我很惊讶,字体不是Arial粗体,这是一个具有不同字体文件的单独的面。指定Arial粗体字体的唯一方法是将pszFaceName设置为“Arial粗体”。不幸的是,仅仅在字体名称的末尾加上粗体只对某些字体有效,因为有些字体没有单独的粗体字体

是否有任何指定粗体的常规方法可以确保返回字体的实际粗体版本

谢谢


Phil

这不是它的工作方式,Windows字体映射器不会替换面名称。“Arial Bold”不是标准字体,也与标准“Arial”字体没有任何关系。如果你想用它,那你就必须要它


使用FW_粗体询问“Arial”将选择c:\windows\fonts\arialbd.ttf字体文件。专门设计用于呈现粗体arial的字体文件。面名为“Arial”。类似地,ariali.ttf提供斜体版本,arialbi.ttf提供粗体斜体版本,arial.ttf是正常版本。

我从来没有想过粗体和粗体版本使用不同的字体名称是一样的,但我还没有深入研究文本处理。您确定这是正确的吗?是否检查了渲染是否不同?我认为GDI只是告诉你你要求的字体,自己处理单独的字体版本/模拟粗体。我不认为这里有简单的解决方法。Arial粗体是一种与Arial不同的字体,恰好有“粗体”一词。Arial和Arial粗体都可以加粗,也可以不加粗。这就消除了我的疑虑+1也许我应该在某个时候对文本渲染有更多的了解。