我有一个用C++编写的Windows应用程序,并使用Win32-API。我想以编程方式更改应用程序的字体平滑,从而允许应用程序的用户在"none“、"standard”和"cleartype“之间进行选择。
我使用SystemParametersInfo(SPI_SETFONTSMOOTHING,... )更改平滑类型,但这会更改Windows的全局系统设置,并影响所有其他应用程序。有没有办法单独更改我的应用程序的平滑?
编辑:澄清-我在我的窗口中嵌入了另一个窗口,因此我无法控制嵌入窗口中的字体。
谢谢
发布于 2010-12-04 01:16:27
也许有一种更简单的方法,但有一种方法是将所有绘制字体和所有控件使用的字体更改为关闭抗锯齿的字体。
您可以使用WM_GETFONT和WM_SETFONT来获取/设置大多数控件使用的字体(它们都使用HFONT对象句柄)。
您可以使用GetObject获取HFONT的LOGFONT结构,然后调整LOGFONT上的抗锯齿标志,然后通过CreateFontIndirect创建新的HFONT。(不要忘记在控件不再使用该字体后,在某个地方销毁它。)
同样值得记住的是,某些字体可能会强制启用抗锯齿或cleartype。因此,在编辑LOGFONT结构时,您可能需要更改字体名称以及标志。
发布于 2018-07-11 09:29:01
在具有DPI设置和Windows10的现代显示器上,即使启用了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>https://stackoverflow.com/questions/4347873
复制相似问题