对于我们的Windows Mobile应用程序,我想在设备上启用ClearType选项。根据MSDN上的this文章,应该通过设置以下注册表项来完成:
HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype
但是设置此特定键后什么也没有发生。即使是软重置也不会启用它,而只是摆脱了我刚刚创建的注册表项。
奇怪的是,当我使用“设置”->“系统”->“屏幕”->“ ClearType”手动设置它时,它立即可用。比较更改设置前后的注册表导出结果表明,更改只是上述键。
我不太了解自己更改注册表项时为什么它不起作用。知道我在做什么错的人吗?
[更新]
看来解决方案是执行以下任一操作:
广播带有正确参数的WM_SETTINGCHANGE消息,例如:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)
但这到目前为止还没有奏效。我猜wParam参数可能需要一个不同的值。
或调用带有相关事件的CreateEvent进行ClearType更改。有点像BacklightChangeEvent或SDKBacklightChangeEvent可以工作。但是到目前为止,我还没有看到有关这些事件的任何文档,因此我无法弄清楚该事件将是什么。
最佳答案
我自己找到了解决方案。事实证明,不需要更改注册表,但是只需使用SPI_SETFONTSMOOTHING参数调用SystemParametersInfo即可使其应用更改。
这是我使用.NET CF 2.0的代码:
[DllImport("coredll.dll", SetLastError = true)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref int pvParam, uint fWinIni);
const uint SPI_SETFONTSMOOTHING = 0x004b;
const uint SPI_UPDATEINI = 0x1;
int pv = 0;
bool ret = SystemParametersInfo(SPI_SETFONTSMOOTHING, 1, ref pv, SPIF_UPDATEINIFILE);