Pregunta

Para nuestra aplicación Windows Mobile Quiero habilitar la opción ClearType en el dispositivo. De acuerdo con este artículo en MSDN que se debe hacer a configurar la siguiente clave de registro:

HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype

Pero no pasa nada después de establecer esta clave particular. Incluso un restablecimiento de software no le permite, sino que simplemente se deshace de la clave de registro que acaba de crear.

Lo extraño es que cuando me puse de forma manual utilizando Configuración-> Sistema-> Screen-> ClearType funciona inmediatamente. Y la comparación de las exportaciones del registro antes y después de cambiar el programa de configuración que es sólo la clave mencionada anteriormente que cambia.

No entiendo muy bien por qué no funcionaría cuando cambio la clave del registro mismo. Cualquiera que sepa lo que estoy haciendo mal aquí?

[Actualización] Parece que la solución es hacer bien:

  • difundir un mensaje WM_SETTINGCHANGE con los parámetros correctos como:

    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)

    Pero eso no ha funcionado hasta ahora. Creo que el parámetro wParam podría necesitar un valor diferente.

  • O llame CreateEvent con el evento relevante para los cambios de ClearType. Un poco como BacklightChangeEvent o SDKBacklightChangeEvent funcionaría. Pero hasta ahora no he visto ninguna documentación sobre estos eventos, así que no puedo trabajar en lo que sería el caso.

¿Fue útil?

Solución

He encontrado la solución a mí mismo. Resulta que hacer el cambio de registro no es necesario, pero sólo una llamada a SystemParametersInfo con el parámetro SPI_SETFONTSMOOTHING es suficiente para hacer que se apliquen los cambios.

Este es mi código utilizando .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);

Otros consejos

¿Se lava el registro después de cambiar el valor y antes de hacer el reajuste del software?
suena como el cambio no persistió.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top