Red de conocimiento informático - Conocimiento del nombre de dominio - Como visualizar bmp en lenguaje C, quiero un programa completo y correcto, urgente!

Como visualizar bmp en lenguaje C, quiero un programa completo y correcto, urgente!

¿Liz? Hola

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.