[C con Clase] Imagen de fondo centrada

Steven R. Davidson vze266ft en verizon.net
Vie Feb 22 18:11:21 CET 2008


Hola Wally,

Wally wrote:
> Hola a Todos los de la lista!!!
> Bue mi duda es esta:
> Quiero poner una imagen de fondo en mi ventana principal logre hacer
> esto pero la imagen aparece varias veces como mosaico, yo quiciera que
> aparezca en forma centrada.
> Desde ya muchas gracias. Le dejo el codigo de la ventana principal:
> 

Para tener una lógica algo más complicada, necesitarás implementarla en 
el procedimiento de ventana. Procesa el mensaje WM_ERASEBKGND en el cual 
obtendrás el DC del área del cliente de la ventana. Por ejemplo,

static HDC hdcImagen;
...
case WM_ERASEBKGND:
   ...
   BitBlt( (HDC)wParam, x,y, anchura,altura, hdcImagen, xx,yy, SRCPAINT );
return 0;

Aquí estamos usando 'hdcImagen' para guardar la imagen en DC de memoria. 
Para centrar la imagen, necesitarás obtener las dimensiones del área del 
cliente y las de la imagen cargada. Puedes calcular las coordenadas 
(x,y) necesarias. Para esto puedes invocar 'GetClientRect()' o puedes 
procesar el mensaje WM_SIZE para conseguir las nuevas dimensiones de la 
ventana cada vez que ésta sea modificada. Por ejemplo,

static WORD wAnchura, wAltura;
...
case WM_SIZE:
   wAnchura = LOWORD(lParam);
   wAltura  = HIWORD(lParam);
return 0;

Así puedes usar estos valores en WM_ERASEBKGND o en cualquier otro 
procesamiento de mensaje.


En cualquier caso, necesitas indicar a la clase de la ventana que no hay 
ningún pincel de fondo. O sea,

PrincipalWIN.hbrBackground = (HBRUSH) NULL;


Espero que esto te ayude.

Steven






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