SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE)返回0

时间:2017-01-30 14:14:59

标签: c++ winapi

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

1 个答案:

答案 0 :(得分:4)

字体平滑"类型" (SPI_GETFONTSMOOTHINGTYPE)仅在启用字体平滑(SPI_GETFONTSMOOTHING)时才有意义。所有其他字体平滑属性也是如此,例如SPI_GETFONTSMOOTHINGCONTRASTSPI_GETFONTSMOOTHINGORIENTATION

您应首先检查SPI_GETFONTSMOOTHING。如果它返回TRUE(非零),然后,您可以查询其他字体平滑属性。如果它返回FALSE(零),那么你就完成了。如果您请求其他字体平滑属性,您将获得无意义的噪音。

因此,换句话说,您的编辑是正确的,MSDN文档可以提供改进。我不确定是不是"不正确&#34 ;;这对我来说似乎是一个非常明显的设计。它是一个C API;用错误的参数调用它可能会导致错误的结果。

The documentation确实说SPI_GETFONTSMOOTHINGTYPE唯一可能的返回值是FE_FONTSMOOTHINGSTANDARDFE_FONTSMOOTHINGCLEARTYPE,因此此参数无法指示字体平滑是已停用不适用。对于禁用字体平滑的情况,SystemParametersInfo的当前实现可能会返回0,但由于文档没有明确说明您可以依赖它,因此您不应该依赖它。 / p>