【问题标题】:Programmatically enable ClearType in Windows Mobile以编程方式在 Windows Mobile 中启用 ClearType
【发布时间】:2010-12-06 17:06:20
【问题描述】:

对于我们的 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 参数可能需要不同的值。

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

【问题讨论】:

  • 您提供的链接仅适用于 Windows CE。具体来说,它被指定给构建图像的人,将 ClearType 集成到图像中。
  • 是的,但这确实引导我找到所需的注册表项,并且在我自己进行更改时监控它时,我确实在注册表中看到它发生了变化。
  • 是的,但显然控制面板涉及对 GWES 的另一个调用,以使其知道更改(如您所说)。没有任何东西监视该特定键的键更改,所以看起来。我想我不会在此评论中添加任何新信息:)

标签: windows-mobile compact-framework registry cleartype


【解决方案1】:

您在更改值后和进行软重置之前是否刷新了注册表?
听起来更改没有持续。

【讨论】:

  • 是的,更改后注册表已刷新。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2010-09-15
    • 2011-03-27
    • 1970-01-01
    • 2011-01-14
    • 2010-09-17
    相关资源
    最近更新 更多