【问题标题】:Changing font smoothing for my application alone and not the global windows font smoothing settings仅更改我的应用程序的字体平滑,而不是全局 Windows 字体平滑设置
【发布时间】:2018-07-11 09:29:00
【问题描述】:

我有一个用 C++ 编写并使用 Win32-API 的 Windows 应用程序。我想以编程方式更改我的应用程序的字体平滑,从而允许我的应用程序用户在“none”、“standard”和“cleartype”之间进行选择。

我使用 SystemParametersInfo(SPI_SETFONTSMOOTHING, ... ) 更改平滑类型,但这会更改 Windows 的全局系统设置,并影响所有其他应用程序。有什么方法可以单独更改我的应用程序的平滑度?

编辑:澄清 - 我在我的窗口中嵌入了另一个窗口,因此我无法控制嵌入窗口中的字体。

谢谢

【问题讨论】:

    标签: c++ windows winapi


    【解决方案1】:

    也许有一种更简单的方法,但一种方法是将您绘制时使用的所有字体以及所有控件使用的所有字体更改为关闭抗锯齿的字体。

    您可以使用WM_GETFONTWM_SETFONT 来获取/设置大多数控件使用的字体(它们都使用HFONT 对象句柄)。

    您可以使用GetObject 获得一个HFONT 的LOGFONT 结构,然后调整LOGFONT 上的抗锯齿标志,然后通过CreateFontIndirect 创建一个新的HFONT。 (不要忘记在某个地方销毁字体,在没有控件不再使用它之后。)

    还值得记住的是,某些字体可能强制启用抗锯齿或 cleartype。因此在编辑 LOGFONT 结构时可能需要更改字体名称和标志。

    【讨论】:

    • 是的。 LOGFONT.lfQuality 是关键。
    【解决方案2】:

    在具有 DPI 设置和 Windows 10 的现代显示器上,即使启用了 ClearType,字体也可能看起来模糊。我花了几个小时来弄清楚为什么一个简单的 Win32 应用程序在窗口装饰中确实有一个很酷的瘦系统字体,而在客户区中同样的字体很难看。关键字是dpiAware。为您的应用程序清单采用以下代码,问题将得到解决:

    <assembly
        xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="AMD64"
        name="Scintilla.SciTE.SciTE"
        type="win32"
    />
    <trustInfo
    xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
        <requestedPrivileges>
          <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
        </requestedPrivileges>
      </security>
    </trustInfo>
    <asmv3:application xmlns="urn:schemas-microsoft-com:asm.v3">
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2012-04-26
      • 1970-01-01
      • 2010-10-29
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多