Como chegar dimensões de texto real quando ClearType está ligado?
Pergunta
Eu tenho um aplicativo Win32 GUI que usa o GDI havily. Ele precisa desenhar texto ao longo de um bitmap em coordenadas especificadas e depois apagá-lo e substituir com o bitmap original.
I faça o seguinte:
- selecione fonte (GetStockObject (DEFAULT_GUI_FONT)), escova, outras coisas no contexto de dispositivo
- chamar GetTextExtentPoint32 () para calcular o tamanho do texto
- tendo agora o texto ponto de partida que eu posso calcular o retângulo texto esperado e armazená-lo
- chamar TextOut () para o mesmo contexto dispositivo com o mesmo ponto de partida e o mesmo texto
e mais tarde restaurar o bitmap para o retângulo loja.
Ele funciona muito bem quando ClearType suavização está desligado. Mas com ClearType do tamanho retornado por GetTextExtentPoint32 () é ligeiramente menor do que o tamanho realmente ocupado pelo texto quando TextOut () é chamado. Então, quando eu mais tarde restaurar o bitmap original algumas pequenas listras do texto permanecer no local e eu tenho artefatos.
Existe alguma cura para esse sem desativar ClearType?
Solução
Você também pode tentar DrawText com DT_CALCRECT para calcular o tamanho string. Talvez ele funciona melhor.
Além disso, você pode então escrever a corda com DrawText dentro de um retângulo com os tamanhos igual ao que você começa com DT_CALCRECT e vai cortar o texto no caso, é um pouco maior.