Pregunta

Tengo una aplicación Win32 GUI que utiliza GDI havily. Que necesita para dibujar texto sobre un mapa de bits en las coordenadas especificadas y luego borrarlo y sustituir con el mapa de bits original.

I proceder como sigue:

  • selecciona fuente (GetStockObject (DEFAULT_GUI_FONT)), cepillo, la otra materia en el contexto de dispositivo
  • llamar GetTextExtentPoint32 () para calcular el tamaño del texto
  • Ahora que tiene el punto de partida de texto puedo calcular el rectángulo de texto esperado y almacenarlo
  • llamar TextOut () para el mismo contexto de dispositivo con el mismo punto de partida y el mismo texto

y posteriormente restaurar el mapa de bits para el rectángulo tienda.

Funciona bien cuando suavizado ClearType está apagado. Pero con ClearType en el tamaño devuelto por GetTextExtentPoint32 () es ligeramente más pequeño que el tamaño realmente ocupada por el texto cuando se llama TextOut (). Así que cuando más tarde restaurar el mapa de bits original algunas pequeñas rayas del texto permanecer en su lugar y no tengo artefactos.

¿Hay alguna cura a esta sin desactivar ClearType?

¿Fue útil?

Solución

También puede probar DrawText con DT_CALCRECT para calcular el tamaño de la cadena. Tal vez funcione mejor.

También se puede entonces escribir la cadena con DrawText dentro de un rectángulo con los tamaños igual a la que se obtiene con DT_CALCRECT y va a cortar el texto en caso de que sea un poco más grande.

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