[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