2009-10-14 8 views
2

Pour notre application Windows Mobile, je souhaite activer l'option ClearType sur le périphérique. Selon this article sur MSDN il devrait être fait établirons la clé de Registre suivante:Autoriser par programme ClearType dans Windows Mobile

HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype 

Mais rien ne se passe après avoir défini cette touche particulière. Même une réinitialisation logicielle ne l'active pas, mais supprime simplement la clé de registre que je viens de créer.

Étrange chose est que lorsque je l'ai défini manuellement à l'aide de Paramètres-> Système-> Écran-> ClearType il fonctionne immédiatement. Et en comparant les exportations de registre avant et après avoir changé le réglage montre que c'est juste la clé mentionnée ci-dessus qui change.

Je ne comprends pas pourquoi cela ne fonctionnerait pas si je modifiais moi-même la clé de registre. Quelqu'un qui sait ce que je fais mal ici?

[mise à jour] Il semble que la solution est de faire soit:

  • radiodiffuser un message WM_SETTINGCHANGE avec les bons paramètres tels que:

    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)

    Mais cela n'a pas fonctionné de manière loin. Je suppose que le paramètre wParam peut avoir besoin d'une valeur différente.

  • Ou appelez CreateEvent avec l'événement approprié pour les modifications ClearType. Un peu comme BacklightChangeEvent ou SDKBacklightChangeEvent fonctionnerait. Mais jusqu'à présent, je n'ai vu aucune documentation sur ces événements, donc je ne peux pas déterminer ce que serait l'événement.

+0

Le lien fourni fait référence à Windows CE uniquement. Plus précisément, il est désigné par la personne qui construit l'image, en intégrant ClearType dans l'image. – Shaihi

+0

True, mais cela m'a conduit à la clé de registre requise, et lors de la surveillance tout en faisant le changement moi-même, je l'ai vu changer dans le registre. –

+0

Oui, mais apparemment le panneau de contrôle implique un autre appel à GWES pour le faire savoir du changement (comme vous l'avez dit). Rien ne surveille le changement de clé pour cette clé spécifique, donc il semble. Je suppose que je n'ajoute aucune nouvelle information avec ce commentaire :) – Shaihi

Répondre

6

J'ai moi-même trouvé la solution. Il s'avère que faire le changement de registre n'est pas nécessaire, mais juste un appel à SystemParametersInfo avec le paramètre SPI_SETFONTSMOOTHING est suffisant pour lui faire appliquer les changements.

Ceci est mon code en utilisant CF .NET 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); 
0

Avez-vous vidé le registre après avoir modifié la valeur et avant d'effectuer la réinitialisation logicielle?
On dirait que le changement n'a pas persisté.

+0

Oui, le registre a été vidé après avoir fait le changement. –

Questions connexes