以编程方式在Windows Mobile中启用ClearType

时间:2009-10-14 14:52:40

标签: windows-mobile compact-framework registry cleartype

对于我们的Windows Mobile应用程序,我想在设备上启用ClearType选项。根据MSDN上的this文章,应该设置以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype

但是在设置此特定键后没有任何反应。即使是软重置也无法启用它,只是简单地删除了我刚刚创建的注册表项。

奇怪的是,当我使用Settings-> System-> Screen-> ClearType手动设置它时,它立即起作用。并且在更改设置之前和之后比较注册表导出显示它只是上面提到的密钥更改。

我不太明白为什么当我自己更改注册表项时它不起作用。谁知道我在这里做错了什么?

[更新] 看起来解决方案是:

  • 使用正确的参数广播WM_SETTINGCHANGE消息,如:

    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)

    但到目前为止还没有奏效。我猜wParam参数可能需要不同的值。

  • 或者使用ClearType更改的相关事件调用CreateEvent。有点像BacklightChangeEvent或SDKBacklightChangeEvent会起作用。但到目前为止,我还没有看到有关这些事件的任何文件,所以我无法弄清楚事件会是什么。

2 个答案:

答案 0 :(得分:6)

我自己找到了解决方案。事实证明,不需要进行注册表更改,但只需使用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);

答案 1 :(得分:0)

在更改值之后和执行软重置之前,您是否刷新了注册表?
听起来这种改变并没有持续下去。