[C con Clase] CWnd*: posible?

Luiz Pepe pepeluiz en hotmail.com
Vie Mar 16 21:01:45 CET 2007


Saludos !
Muchas gracias por la ayuda. Tienes toda la razon en tu explicacion.
Inicialmente estuve usando:
int nAnchura = pDC->GetDeviceCaps( HORZRES );
int nAltura  = pDC->GetDeviceCaps( VERTRES );
Usando esto tampoco he podido encontrar el centro deseado.
Traduciendo:
 	pDC->TextOut((nAnchura  / 2) - ((str.GetLength() / 2) * strWidth),
			10, str);
deberia ser centrado.


----Original Message Follows----
From: Steven Davidson <steven en conclase.net>
Reply-To: Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] CWnd*: posible?
Date: Fri, 16 Mar 2007 13:00:34 -0600

Hola Jos$B!&(B

El pasado 2007-03-16 17:28:18, Pepe Luiz escribi$B!&(B

PL> Saludos a todos
PL> Tengo un problema tratando de obtener el CDC para un CWnd*
PL> (Usando VC++ 6.0)
PL> if (printDlg.DoModal() == IDCANCEL)     // Get printer settings from 
user
PL>         return;
PL>   dc.Attach(printDlg.GetPrinterDC());     // Get and attach a printer 
DC
PL> 	CWnd* myWnd = dc.GetWindow();    // Aqui el objeto no pasa nada. 
000000x00
PL> 	CRect myRect;
PL> 	myWnd->GetClientRect(&myRect); // Por lo tanto no puedo obtener el 
rect.
PL> El problema de fondo: Estoy escribiendo text y necesito centrar un 
text.
PL> 	CFont* pOldFont = (CFont*) pDC->SelectObject(&otroFont);
PL> 	pDC->GetTextMetrics(&tm);
PL> 	int strWidth = tm.tmAveCharWidth;
PL> 	// Deberia estar centrado.
PL> 	pDC->TextOut((myRect.Width() / 2) - ((str.GetLength() / 2) * 
strrWidth),
PL> 				10, str);
PL> Algun metodo diferente de hacerlo?

Me temo que est$BaT(B aplicando tareas propias de un DC de la pantalla a un DC 
de la impresora. Algunas tareas son aplicables a ambos DC's, pero otras no. 
En tu caso, no podemos hablar de "ventanas" cuando estamos tratando una 
impresora o el DC de una impresora.

La soluci es usar 'GetDeviceCaps()' para averiguar las dimensiones 
de la impresora y cualquier otra informaci que necesitemos. Por 
ejemplo,

int nAnchura = pDC->GetDeviceCaps( HORZRES );
int nAltura  = pDC->GetDeviceCaps( VERTRES );

Tambi$BqO(B puedes usar los $ByO(Bdices 'PHYSICALOFFSETX' y 'PHYSICALOFFSETY', pero 
los valores est$BaO(B en unidades del dispositivo, que en el caso de una 
impresora son "puntos". Por ejemplo, si se establece que hay 600 dpi 
(puntos por pulgada) sobre un papel de 8,5 x 11 pulgadas, con un margen de 
0,25 pulgadas en el eje X y 0,50 pulgadas en el eje Y, entonces 
'GetDeviceCaps()' retornar$ByB(B 150 y 300 puntos respectivamente a los $ByO(Bdices 
mencionados.


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

_________________________________________________________________
$B5f6K$N(BWEB$B%V%i%&%8%s%04D6-$r<B8=!*(BMSN$BHG(BIE7$B$,BTK>$N%G%S%e!<(B 
http://promotion.msn.co.jp/ie7/ 





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