C++ Windows API选择粗体字体
我正在尝试编写一些代码来选择粗体字体(我实际上希望获得要发送到跨平台字体渲染器的字体文件名,但这不太相关)。我使用CreateFont()将cWeight设置为FW_BOLD,pszFaceName设置为“Arial”。我将此字体选择到DC中,并使用GetTextFace()检查实际选择的字体。结果是Arial。我很惊讶,字体不是Arial粗体,这是一个具有不同字体文件的单独的面。指定Arial粗体字体的唯一方法是将pszFaceName设置为“Arial粗体”。不幸的是,仅仅在字体名称的末尾加上粗体只对某些字体有效,因为有些字体没有单独的粗体字体 是否有任何指定粗体的常规方法可以确保返回字体的实际粗体版本 谢谢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粗体”。不幸的是,仅仅在字体名称的末尾加
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也许我应该在某个时候对文本渲染有更多的了解。