Domanda

Per la nostra applicazione Windows Mobile voglio abilitare l'opzione ClearType sul dispositivo. Secondo questo articolo su MSDN dovrebbe essere fatto BE impostando la seguente chiave di registro:

HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype

Ma non succede nulla dopo aver impostato questa chiave particolare. Anche un soft reset non consente, ma semplicemente si sbarazza della chiave di registro Ho appena creato.

Cosa strana è che quando ho impostato manualmente utilizzando Impostazioni-> Sistema-> Screen-> ClearType funziona immediatamente. E confrontando le esportazioni Registro di sistema prima e dopo aver cambiato lo spettacolo impostazione che è proprio la chiave di cui sopra che cambia.

Io non capisco il motivo per cui non avrebbe funzionato quando cambio la chiave di registro stesso. Chiunque sa che cosa sto facendo male qui?

[update] Sembra che la soluzione è quella di effettuare una:

  • trasmettere un messaggio WM_SETTINGCHANGE con i parametri corretti come:

    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)

    Ma questo non ha funzionato finora. Credo che il parametro wParam potrebbe essere necessario un valore diverso.

  • O chiamare CreateEvent con l'evento rilevante per le modifiche ClearType. Un po 'come BacklightChangeEvent o SDKBacklightChangeEvent avrebbe funzionato. Ma finora non ho visto alcuna documentazione su questi eventi, quindi non posso capire cosa sarebbe l'evento.

È stato utile?

Soluzione

Ho trovato la soluzione io stesso. Si scopre che, per rendere il cambiamento di registro non è necessario, ma solo una chiamata a SystemParametersInfo con il parametro SPI_SETFONTSMOOTHING è sufficiente a rendere applicare le modifiche.

Questo è il mio codice utilizzando .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);

Altri suggerimenti

Lo si svuota il Registro di sistema dopo aver modificato il valore e prima di fare il Soft Reset?
Suona come il cambiamento non persisteva.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top