代码之家  ›  专栏  ›  技术社区  ›  Tom van Enckevort

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

  •  2
  • Tom van Enckevort  · 技术社区  · 15 年前

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

    HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype
    

    但是在设置这个特定的键之后什么也不会发生。即使软重置也不能启用它,只需去掉我刚刚创建的注册表项。

    奇怪的是,当我使用设置-系统-屏幕-ClearType手动设置时,它会立即工作。通过比较注册表在更改设置之前和之后的导出,可以发现更改的只是上面提到的键。

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

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

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

      SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)

      但到目前为止还没有奏效。我想wparam参数可能需要一个不同的值。

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

    2 回复  |  直到 15 年前
        1
  •  6
  •   Tom van Enckevort    15 年前

    我自己找到了解决办法。原来不需要更改注册表,只需要调用 SystemParametersInfo 使用spi_setfontsmoothing参数就足以使其应用更改。

    这是我使用.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);
    
        2
  •  0
  •   Shaihi    15 年前

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