if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &uiType, 0) != 0) {
Debug(uiType); // shows 0
}
这发生在我使用 Windows Server 2012 R2 的远程桌面上。 According to the docs有 2 个可能的值:
The possible values are FE_FONTSMOOTHINGSTANDARD (1) and FE_FONTSMOOTHINGCLEARTYPE (2).
我也发现了这个类似的问题,但没有答案: Meaning of, SystemInformation.FontSmoothingType's return value
有谁知道uiType
0 是什么意思?
编辑:在那台远程机器上 SPI_GETFONTSMOOTHING
返回 0。
Determines whether the font smoothing feature is enabled.
文档显然是错误的。我假设正确的方法应该是首先检查SPI_GETFONTSMOOTHING
,然后才检查SPI_GETFONTSMOOTHINGTYPE
最佳答案
字体平滑“类型”(SPI_GETFONTSMOOTHINGTYPE
)仅在启用字体平滑(SPI_GETFONTSMOOTHING
)时才有意义。所有其他字体平滑属性也是如此,例如 SPI_GETFONTSMOOTHINGCONTRAST
和 SPI_GETFONTSMOOTHINGORIENTATION
。
您应该先检查SPI_GETFONTSMOOTHING
。如果它返回 TRUE
(非零),则您可以查询其他字体平滑属性。如果它返回 FALSE
(零),那么您就完成了。如果您请求其他字体平滑属性,您将得到无意义的噪音。
因此,换句话说,您的编辑是正确的,MSDN 文档有待改进。我不确定它是否“不正确”;这对我来说似乎是一个非常明显的设计。它是一个 C API;假设使用错误的参数调用它会导致错误的结果。
The documentation确实说 SPI_GETFONTSMOOTHINGTYPE
唯一可能的返回值是 FE_FONTSMOOTHINGSTANDARD
和 FE_FONTSMOOTHINGCLEARTYPE
,所以这个参数不可能指示字体平滑已禁用或不适用。 SystemParametersInfo
的当前实现可能会在禁用字体平滑的情况下返回 0,但由于文档未明确说明您可以依赖它,因此您不应依赖它。
关于c++ - 系统参数信息(SPI_GETFONTSMOOTHINGTYPE)返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41938051/