Pergunta

Para o nosso aplicativo Windows Mobile, quero ativar a opção ClearType no dispositivo. De acordo com isto Artigo sobre o MSDN, deve ser feito definindo a seguinte chave de registro:

HKEY_LOCAL_MACHINE\SYSTEM\GDI\Cleartype

Mas nada acontece depois de definir essa chave específica. Mesmo uma redefinição suave não o habilita, mas simplesmente se livra da chave do registro que acabei de criar.

A coisa estranha é que, quando eu o configuro manualmente usando as configurações-> System-> Screen-> ClearType, ele funciona imediatamente. E comparar as exportações do registro antes e depois de alterar a configuração mostra que é apenas a chave mencionada acima que as alterações.

Não entendo muito bem por que não funcionaria quando eu mudei a chave do registro. Alguém que sabe o que estou fazendo de errado aqui?

Atualização] Parece que a solução é fazer:

  • Transmita uma mensagem WM_SETTINGCHANGE com os parâmetros corretos como:

    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 1)

    Mas isso não funcionou até agora. Eu acho que o parâmetro WPARAM pode precisar de um valor diferente.

  • Ou ligue para o createEvent com o evento relevante para alterações no ClearType. Um pouco como BacklightChangeEvent ou SdkbacklightChangeEvent funcionariam. Mas até agora não vi nenhuma documentação sobre esses eventos, então não posso descobrir qual seria o evento.

Foi útil?

Solução

Eu mesmo encontrei a solução. Acontece que fazer a mudança do registro não é necessária, mas apenas uma chamada para SystemParametersInfo Com o parâmetro spi_setfontsmoothing, é suficiente para fazê -lo aplicar as alterações.

Este é o meu código usando .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);

Outras dicas

Você lavou o registro depois de alterar o valor e antes de fazer a redefinição suave?
Parece que a mudança não persiste.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top