c++ - 系统参数信息(SPI_GETFONTSMOOTHINGTYPE)返回 0

标签 c++ winapi

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_GETFONTSMOOTHINGCONTRASTSPI_GETFONTSMOOTHINGORIENTATION

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

因此,换句话说,您的编辑是正确的,MSDN 文档有待改进。我不确定它是否“不正确”;这对我来说似乎是一个非常明显的设计。它是一个 C API;假设使用错误的参数调用它会导致错误的结果。

The documentation确实说 SPI_GETFONTSMOOTHINGTYPE 唯一可能的返回值是 FE_FONTSMOOTHINGSTANDARDFE_FONTSMOOTHINGCLEARTYPE,所以这个参数不可能指示字体平滑已禁用不适用SystemParametersInfo 的当前实现可能会在禁用字体平滑的情况下返回 0,但由于文档未明确说明您可以依赖它,因此您不应依赖它。

关于c++ - 系统参数信息(SPI_GETFONTSMOOTHINGTYPE)返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41938051/

相关文章:

c++ - 最小(最大)处理器状态 API,C++

python - 如何在 Python 中的单独线程中启动 win32 应用程序

c++ - mciSendString() 设置音频音量错误 261

C++:覆盖还是重载?

c++ - 具有 64 位基础整数的枚举

c++ - 在 MacOSX 上,使用 g++,std::vector .size() 线程安全吗?

c++ - 为什么 'CreateEvent' 创建的 HANDLE 在另一个进程中无效?

c++ - 右 ALT 发送两个虚拟键码

c++ - 将基本文本添加到 Win32 应用程序,c++

c++ - QT DEFINES 是否与 C++ 中的#define 做同样的事情?