C/Visual C - DrawText //Urgente!

 
Vista:

DrawText //Urgente!

Publicado por VIRTUAJATS (1 intervención) el 15/09/2003 06:12:05
Mi objetivo es dibujar un texto en una ventana, de manera que yo pueda indicarle las siguientes propiedades:

Color de Texto
Color de Fondo
Fuente (Nombre, Tamaño, Tachado, Subrayado, etc...)...

Hasta el momento he estado utilizando DRAWTEXT para lograrlo, pero todavía no se como indicarle la Fuente.
Este es el código que uso:

//La variable hwnd está en los parametros del WindowProcedure
//En WM_PAINT del manipulador de mensajes
HDC hdc;
PAINTSTRUCT ps;
RECT rc;
hdc = BeginPaint (hwnd, &ps);
GetClientRect (hwnd, &rc);
SetTextColor (hdc, 0xFFFFFF);
SetBkMode(hdc, TRANSPARENT);
DrawText (hdc, "Hello, World!", -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint (hwnd, &ps);

¿A alguien se le ocurre como hago para especificar la fuente a usar?
¿Existe otra forma de conseguir mi objetivo más fácilmente?

Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DrawText //Urgente!

Publicado por s (1 intervención) el 16/09/2003 14:35:59
Hola.
El proceso de crear un fuente es algo complejo. Espero que entiendas mi explicación.

Primero, crea estas dos variables globales(ponlas antes del winmain)

LOGFONT gLogFont; //global
HFONT gHTextFont = NULL; //globales

Ahora, el sig. procedimiento crea la fuente. Esto solo debe realizarse una vez, así que no importa donde pongas el sig. framento de código, sólo se ejecutara una vez:

if(gHTextFont == NULL)//se ejecuta solo una vez
{
int numPtsFuente = 9;
gLogFont.lfHeight = -MulDiv(numPtsFuente, GetDeviceCaps(gMemDC, LOGPIXELSY), 72);
gLogFont.lfWidth = 0;
gLogFont.lfEscapement = 0;
gLogFont.lfOrientation = 0;
gLogFont.lfWeight = FW_NORMAL;
gLogFont.lfItalic = FALSE;
gLogFont.lfUnderline = FALSE;
gLogFont.lfStrikeOut = FALSE;
gLogFont.lfCharSet = DEFAULT_CHARSET;
gLogFont.lfOutPrecision= OUT_DEFAULT_PRECIS ;
gLogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS ;
gLogFont.lfQuality = DEFAULT_QUALITY ;
gLogFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE ;
lstrcpy(gLogFont.lfFaceName, TEXT("Arial")) ; //con esto
//seleccionas el tipo de fuente
gLogFont.lfFaceName[LF_FACESIZE] = 0 ;

gHTextFont = CreateFontIndirect (&gLogFont) ;

if (gHTextFont == NULL)
exit(3); //error,no debe ocurrir, por lo que termina
}//fin de crear fuente

Ya con esto tienes una fuente que puedes usar en el programa. Si quieres más de una fuente simultanea, repites el procedimiento anterior, con variables adicionales.

Ahora, antes de dibujar el texto, seleccionas la fuente que deseas usar. En este caso es gHTextFont. También puedes seleccionar el color de la fuente y si deseas que se pinte de forma transparente u opaca sobre el fondo.( este código lo pones en el WM_PAINT)

SelectObject(hDC, gHTextFont) ; //selecciona fuente

SetTextColor(hDC,RGB(0xFF,0xFF,0xFF) ); //elige color texto

SetBkMode(hDC,TRANSPARENT); //elige el modo de pintado

//ahora pones tu código para dibujar texto

No olvides que debes liberar recursos utilizados, por lo que pon el siguiente código en el mensaje WM_DESTROY o alguno similar

if(gHTextFont!=NULL)DeleteObject(gHTextFont);

En sí, la clave del manejo de fuentes se basa en dos funciones:
CreateFontIndirect ()
SelectObject()
Puedes encontrar más información en la ayuda del msdn. Espero que te haya servido de algo mi respuesta.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar