Como visualizar bmp en lenguaje C, quiero un programa completo y correcto, urgente!
El lenguaje C requiere la API de Win32 para mostrar el mapa de bits bmp, de la siguiente manera:
¿Booleano? BitBlt(
HDC?hdcDest,? //La visualización del mapa de bits en el entorno del dispositivo de destino
int?nXDest, //La coordenada x del mapa de bits mostrado en el cliente area.
int? nYDest, //? La coordenada y del mapa de bits mostrado en el área del cliente.
int? ¿Qué pasa con la longitud de la visualización del mapa de bits? hdcSrc, //? El entorno del dispositivo de origen (incluido el mapa de bits bmp que se mostrará)
int ?
int?nYSrc? //La posición inicial y mostrada en el mapa de bits actual.
¿DWORD? dwRop//? Modo de mapeo
); el siguiente es el código fuente:
//Mostrar mapa de bits bmp
# include ltwindows.h gt
# Contiene "recurso.h"
¿LRESULTADO? ¿Llamar de vuelta? WndProc(HWND, UINT? WPARAM,? LPARAM);
¿No válido? dibujar ladrillo();?
int? ¿WINAPI? WinMain(¿hin instancia? hInstance,
? HINSTANCE? hPrevInstance,
PSTR? szCmdLine
? int? iCmdShow)
{
staticTCHARszAppName[]? =?TEXT(" Bmp ");
HWNDhwnd
MSGmsg
WNDCLASSwndclass
wndclass.style =? ¿CS_HREDRAW? |?CS_VREDRAW
wndclass.lpfnWndProc =? WndProc
wndclass.cbClsExtra=? 0;
wndclass.cbWndExtra =? 0;
clase wnd .h instancia =? hInstancia
wndclass.hIcon =? LoadIcon(NULL,IDI_Application);
wnd clase h cursor =? LoadCursor(NULL, IDC_ARROW);
clase wnd fondo HBR =? (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName =? NULL
clase wnd. nombre de clase lpsz =? szAppName
if (!register class( amp; wndclass))
{
MessageBox(NULL, text("¿Esto? ¿Programa? ¿Requisitos? ¿Windows? NT !"),
szAppName,?MB_icon error);
¿Devolver? 0;
}
hwnd? =?CreateWindow(szAppName,
Text("Bmp?Demo"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
754,
566,
Vacío,
Vacío,
hInstancia,
NULL);
Ventana de visualización (hwnd, icmd show);
Ventana de actualización (hwnd);
while(GetMessage(amp;MSG,?NULL ,? 0, ?0))
{
Traducir mensaje (y MSG);
enviar mensaje (y MSG);
}
¿Volver? msg.wParam
p>
}
¿RESULTADO? ¿Llamar de vuelta? WndProc(HWND?hwnd,?UINT?Message,?WPARAM?wParam,?LPARAM?lParam)
{
staticHBITMAPhBitmap//El identificador del mapa de bits representa el mapa de bits.
¿Electricidad estática? intcxBitmap,? cyBitmap//La longitud y el ancho del mapa de bits
BITMAPbitmap
HDChdc,? hdcMem
HINSTANCEhInstance
PAINTSTRUCTps
Cambiar (mensaje)
{
¿Caso? WM_CREATE:
h¿Instancia? =?((LPCREATESTRUCT)lParam)- gt; hInstance//Obtener el identificador de instancia de la ventana
hBitmap? =?LoadBitmap(hInstance, MAKEINTRESOURCE(IDB _ bitmap 1)); //Carga el mapa de bits en la memoria
GetObject(hBitmap, sizeof(bitmap),? amp bitmap);
cxMapa de bits? =?bitmap .BM width; //Obtener la longitud del mapa de bits
cyBitmap? =?bitmap .BM height;//Obtener el ancho del mapa de bits
¿Regresar? 0?;
¿Caso? WM_PAINT:
hdc? =?BeginPaint(hwnd, ampPS);
hdcMem? =?CreateCompatibleDC(hdc); //Crea un hdcMEM compatible con la tabla de descripción del entorno del dispositivo HDC, que se utiliza principalmente para tomar capturas de pantalla en la memoria.
SelectObject(hdcMem, mapa hbit);? //Selecciona el mapa de bits y colócalo en hdcMem.
BitBlt(hdc,?-1,?-1,?cxBitmap,?cyBitmap,?hdcMem,?0,?0,?src copy);//Dibujar mapa de bits bmp
DeleteDC(hdc mem);
EndPaint(hwnd, ampPS);
¿Volver? 0;
¿Caso? WM_DESTROY:
eliminar objeto (mapa hbit);
PostQuitMessage(0);
¿Volver? 0;
}
¿Volver? DefWindowProc(hwnd, message,?wParam,?lParam);
}Efecto de ejecución del programa:
Espero que pueda ayudarte.
ps:
El archivo adjunto es el proyecto completo, un proyecto creado con vs2008, incluidos los recursos correspondientes.