[C con Clase] Re: ¿Cómo posicionar un texto en un cuadro de diàlogo?

Francesc fcabecer en xtec.cat
Sab Feb 17 10:07:04 CET 2007


perfecto, gracias

Por cierto que opinas de C#

----- Original Message ----- 
From: "Steven Davidson" <steven en conclase.net>
To: <cconclase en listas.conclase.net>
Sent: Friday, February 16, 2007 9:49 PM
Subject: Re: [C con Clase] ¿Cómo posicionar un texto en un cuadro de 
diàlogo?


Hola Francesc,

El pasado 2007-02-16 06:34:35, Francesc Cabecerans escribió:

FC> Hola quiero escribir un texto con TextOut(hDC,x,y,cadena,longitud de la 
cadena);
FC> Quisiera además que el texto apareciera centrado, para ello utilizo:
FC> SetTextAlign(hDC, TA_CENTER);
FC> Ahora empiezan los problemas..., como conseguir las coordenadas x e y?
FC> Bien he mirado en el archivo de recurso dialogo.rc, y he anotado las 
coordenadas de la ventana...
FC> pero si las pongo en la función TextOut, no va nada bien...
FC> Luego he visto que se pueden obtener las medidas de la ventana con 
GetWindowExtEx, y que las coloca en una estructura SIZE, ...
FC> pues tampoco parece que vaya bien....
FC> En otro lugar he encontrado otra cosa aparentmente más senzilla, 
directamente LOWORD(lParam) da la coordenada x i HIWORD(lParam) da la 
coordenada y...
FC> en el caso que se redimensione la ventana (de hecho no es mi caso porque 
la venta no se modifica pero se tenía que probar ...
FC> Estas medidas, están el píxels? en milímetros? tienen alguna relación 
directa con las unidades que utiliza TextOut?

Los cuadros de diálogo usan unidades de diálogo. Para saber su equivalencia 
en píxeles, puedes usar la función 'GetDialogBaseUnits()'. La proporción es 
4 x 8. Esto es, X = base * 4 e Y = base * 8. Si necesitas convertir a 
píxeles, sugiero usar 'MapDialogRect()'.

De todas maneras, para resolver tu problema, creo que es mejor usar 
'GetClientRect()' para centrar tu mensaje. Esto sería,

RECT rect;

GetClientRect( hDialogo, &rect );
TextOut( hdcDialogo, rect.right/2,rect.bottom/2, szMensaje, nCantMensaje );

Como las coordenadas de 'TextOut()' representan la esquina superior 
izquierda del cuadro que contiene el mensaje, seguramente querrás centrar el 
texto. Sugiero usar conjuntamente la función 'GetTextExtentPoint32()' para 
averiguar las dimensiones de tal cuadro para tal mensaje.


Espero que esto te ayude.

Steven
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 






Más información sobre la lista de distribución Cconclase