Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cin.get(); en 30 Enero 2014, 17:06 pm



Título: [Ayuda] Cargar BMP en C++ [Windows]
Publicado por: cin.get(); en 30 Enero 2014, 17:06 pm
Hola amigos, espero y me puedan ayudar.

Estoy buscando alguna función de la librería "windows.h" que me ayude a cargar bitmaps en una ventana he leído un poco y he encontrado algo sobre una función llamada LoadImage() la he usado pero sólo me deja cargar una imagen y ni si quiera la he logrado imprimir en la posición que yo quiera.

Es decir quiero crear algo como esto:

Código
  1. void ImagenCarga(char* nombre, int x, int y)

Tengo entendido que con HWND se declara la ventana y con HBITMAP el interior de la ventana en el que se puede dibujar. Encontré esto por internet:

Código
  1. hBitmap = (HBITMAP)LoadImage(NULL,"imagen.bmp", IMAGE_BITMAP,0,0, LR_LOADFROMFILE);

Pero como digo, quisiera poder cargar tantos bmps como quiera y en la posición que yo desee.

Disculpen si me enredé un poco pero espero y me puedan ayudar. más que nada la quiero para desarrollar pequeños videojuegos. Saludos y gracias


Título: Re: [Ayuda] Cargar BMP en C++ [Windows]
Publicado por: amchacon en 30 Enero 2014, 18:13 pm
Para hacer videojuegos, deja Windows API y mirate SFML/Allegro. Son librerías especializadas en multimedia.


Título: Re: [Ayuda] Cargar BMP en C++ [Windows]
Publicado por: x64core en 30 Enero 2014, 18:36 pm
Hola amigos, espero y me puedan ayudar.

Estoy buscando alguna función de la librería "windows.h" que me ayude a cargar bitmaps en una ventana he leído un poco y he encontrado algo sobre una función llamada LoadImage() la he usado pero sólo me deja cargar una imagen y ni si quiera la he logrado imprimir en la posición que yo quiera.

Es decir quiero crear algo como esto:

Código
  1. void ImagenCarga(char* nombre, int x, int y)

Tengo entendido que con HWND se declara la ventana y con HBITMAP el interior de la ventana en el que se puede dibujar


El proceso es este:

hBitMap = LoadBitmap(hInst, MAKEINTRESOURCE(ID));

hDC = BeginPaint(hWnd, &lpPaintInfo)/GetDC(hWnd);
hMemDC = CreateCompatibleDC(hDC);
hOldDCObj = SelectObject(hMemDC, hBitMap);
BitBlt(hDC, x, x, x, x, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hOldDCObj);
DeleteDC(hMemDC);
EndPaint(hWnd, &lpPaintInfo);

DeleteObject(hBitMap);

Puesto que no sé desde donde estas dibujando los bitmap puede ser BeginPaint o GetDC pero más recomendable es BeginPaint en WM_PAINT
eso por si se requiere que se redibuje.



Título: Re: [Ayuda] Cargar BMP en C++ [Windows]
Publicado por: cin.get(); en 30 Enero 2014, 22:01 pm
Para hacer videojuegos, deja Windows API y mirate SFML/Allegro. Son librerías especializadas en multimedia.
Sii lo sé, he probado sdl, allegro y muchas pero para ser sincero lo único que ocupo es cargar imágenes lo de más lo hago yo, no me gusta usar funciones creadas por otros aunque esto sea reinventar la rueda :P


Título: Re: [Ayuda] Cargar BMP en C++ [Windows]
Publicado por: cin.get(); en 30 Enero 2014, 22:02 pm


El proceso es este:

hBitMap = LoadBitmap(hInst, MAKEINTRESOURCE(ID));

hDC = BeginPaint(hWnd, &lpPaintInfo)/GetDC(hWnd);
hMemDC = CreateCompatibleDC(hDC);
hOldDCObj = SelectObject(hMemDC, hBitMap);
BitBlt(hDC, x, x, x, x, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hOldDCObj);
DeleteDC(hMemDC);
EndPaint(hWnd, &lpPaintInfo);

DeleteObject(hBitMap);

Puesto que no sé desde donde estas dibujando los bitmap puede ser BeginPaint o GetDC pero más recomendable es BeginPaint en WM_PAINT
eso por si se requiere que se redibuje.



Muchas gracias por tu respuesta, exactamente que es lo que hace cada parte :P


Título: Re: [Ayuda] Cargar BMP en C++ [Windows]
Publicado por: x64core en 31 Enero 2014, 05:20 am
Muchas gracias por tu respuesta, exactamente que es lo que hace cada parte :P
Detalles en la MSDN. Además si estas haciendo eso desde WM_PAINT usar BeginPaint y puedes cargar el bitmap en el inicio del programa así evitas cargarla y descargarla cada vez que una ventana oculta tu bitmap.