[Ayuda] Cargar BMP en C++ [Windows]

Iniciado por cin.get();, 30 Enero 2014, 17:06 PM

0 Miembros y 1 Visitante están viendo este tema.

cin.get();

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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
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

amchacon

Para hacer videojuegos, deja Windows API y mirate SFML/Allegro. Son librerías especializadas en multimedia.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

x64core

Cita de: 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 (cpp) [Seleccionar]
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.


cin.get();

Cita de: amchacon en 30 Enero 2014, 18:13 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

cin.get();

Cita de: x64Core en 30 Enero 2014, 18:36 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

x64core

Cita de: cin.get(); en 30 Enero 2014, 22:02 PM
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.