Программно включить ClearType в Windows Mobile
-
21-09-2019 - |
Вопрос
Для нашего приложения Windows Mobile я хочу включить на устройстве опцию ClearType.В соответствии с этот статье на MSDN, это необходимо сделать, установив следующий ключ реестра:
HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype
Но после установки именно этого ключа ничего не происходит.Даже программный сброс не включает его, а просто удаляет только что созданный мной ключ реестра.
Странно то, что когда я устанавливаю его вручную с помощью «Настройки->Система->Экран->ClearType», он работает сразу.И сравнение экспорта реестра до и после изменения настройки показывает, что меняется только ключ, упомянутый выше.
Я не совсем понимаю, почему это не сработает, если я сам изменю ключ реестра.Кто-нибудь, кто знает, что я здесь делаю не так?
Обновление] Похоже, решение должно сделать либо:
Отправьте сообщение WM_SETTINGCHANGE с правильными параметрами, например:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)
Но пока это не сработало.Я предполагаю, что параметру wParam может потребоваться другое значение.
Или вызовите CreateEvent с соответствующим событием для изменений ClearType.Немного похоже на BacklightChangeEvent или SDKBacklightChangeEvent.Но пока я не видел никакой документации об этих событиях, поэтому не могу понять, что это будет за событие.
Решение
Я нашел решение сам.Оказывается, не нужно вносить изменения в реестр, а достаточно вызвать Системные параметрыИнформация с параметром 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);
Другие советы
Вы очищали реестр после изменения значения и перед программным сбросом?
Похоже, изменения не сохранились.