if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &uiType, 0) != 0) {
Debug(uiType); // shows 0
}
在Windows Server 2012 R2的远程桌面上发生了这种情况。 According to the docs有两个可能的值:
可能的值为 FE_FONTSMOOTHINGSTANDARD (1)和 FE_FONTSMOOTHINGCLEARTYPE (2)。
我也发现了类似的问题,但没有答案: Meaning of, SystemInformation.FontSmoothingType's return value
有谁知道uiType
0意味着什么?
编辑:在该远程计算机上SPI_GETFONTSMOOTHING
返回0.
确定是否启用了字体平滑功能。
文档显然是错误的。我会假设正确的方法应首先检查SPI_GETFONTSMOOTHING
,然后才SPI_GETFONTSMOOTHINGTYPE
答案 0 :(得分:4)
字体平滑"类型" (SPI_GETFONTSMOOTHINGTYPE
)仅在启用字体平滑(SPI_GETFONTSMOOTHING
)时才有意义。所有其他字体平滑属性也是如此,例如SPI_GETFONTSMOOTHINGCONTRAST
和SPI_GETFONTSMOOTHINGORIENTATION
。
您应首先检查SPI_GETFONTSMOOTHING
。如果它返回TRUE
(非零),然后,您可以查询其他字体平滑属性。如果它返回FALSE
(零),那么你就完成了。如果您请求其他字体平滑属性,您将获得无意义的噪音。
因此,换句话说,您的编辑是正确的,MSDN文档可以提供改进。我不确定是不是"不正确&#34 ;;这对我来说似乎是一个非常明显的设计。它是一个C API;用错误的参数调用它可能会导致错误的结果。
The documentation确实说SPI_GETFONTSMOOTHINGTYPE
唯一可能的返回值是FE_FONTSMOOTHINGSTANDARD
和FE_FONTSMOOTHINGCLEARTYPE
,因此此参数无法指示字体平滑是已停用或不适用。对于禁用字体平滑的情况,SystemParametersInfo
的当前实现可能会返回0,但由于文档没有明确说明您可以依赖它,因此您不应该依赖它。 / p>