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

Steven Davidson steven en conclase.net
Vie Feb 16 21:49:48 CET 2007


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


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