Pregunta: | 22562 - BITMAP DESDE UN RECURSO EN VISUAL C++ |
Autor: | Maria Encarnacion Navarro Gomez |
Hola a todos,
Estoy intentando pegar un Bitmap a un documento para luego imprimirlo, el documento esta creado y ya funciona pero intento insertar el bitmap y me da errores. La implementacion que utilizo es la siguiente: void PrintBitmap (CDC* pDC) { CDC* pDisplayMemDC = new CDC; Cbitmap* pBitmap = new Cbitmap; PBitmap->LoadBitmap(IDB_LEAVES); PDisplayMemDC->CreateCompatibleDC(pDC); Cbitmap* pOldBitmap = (Cbitmap*) PDisplayMemDC->SelectObject (pBitmap); PDC-> BitBlt (100,100,200,150, pDisplayMemDC, 0, 0, SRCCOPY); Delete pDisplayMemDC->SelectObject (pOldBitmap); Delete pDisplayMemDC; } En todo el documento trabajo con el manejador tipo HDC y en este caso trabajo con la clase CDC, no se como arreglarlo. Al compilar me dice que CDC, Cbitmap, etc. no existe. Muchas gracias. Mari |
Respuesta: | Alvaro Salvatierra Salas |
Hola Mari
Te indico el código necesario para insertar un mapa de bits en el área cliente de una aplicación Visual C, como respuesta a un click en el menu 1.- el proyecto consta de 4 archivos: bitmap.h , resource.h , bitmap.rc y bitmap.cpp 2.- lineas a agregar en bitmap.rc ( se supone que está definido un recurso MENU): MENUITEM "Insertar Bitmap" IDM_INSBM IDR_BM1 BITMAP "C:\\MISDOC\\ARCHIVO.BMP" 3.- incluir esta linea en resource.h #define IDM_INSBM 103 // u otro numero vacante 4.- en archivo bitmap.h, donde se definen las clases ,agregar las siguientes lineas en la definición de clase de ventana CMainWin: CBitmap m_bm1; afx_msg void OnInsertBM() // manejador de mensaje 5.- en archivo bitmap.cpp incluir: #include <afxwin.h> // para usar clases MFC: CDC, CBitmap, etc #include "bitmap.h" #include "resource.h" ON_COMMAND (IDM_INSBM , OnInsertBM) // esta linea dentro del mapa de mensajes. afx_msg void CMainWin::OnInsertBM() // def. de funcion { m_bm1.LoadBitmap(" IDR_BM1") ; CClientDC DC(this); CDC memDC ; memDC. CreateCompatibleDC ( &DC) ; memDC. SelectObject ( & m_bm1) ; DC. BitBlt ( 10 , 10, 64 , 64 , &memDC , 0 , 0 , SRCCOPY ); } (Nota: El contenido de la ventana se pierde al minimizar y restaurar la ventana. Para solucionar eso se debe usar ventana virtual y copiarla a la ventana física cada vez que se reciba mensaje WM_PAINT ) Espero que el ejemplo te sea de utilidad. Saludos. |