c語言需要win32 api來顯示bmp位圖,如下:
布爾?BitBlt(
HDC?hdcDest,?//?目標設備環境中的位圖顯示
int?nXDest,//?在客戶區顯示的位圖的x坐標。
int?nYDest,//?客戶區顯示的位圖的y坐標。
int?nWidth,//?位圖顯示的寬度
int?高度呢?//?位圖顯示的長度
HDC?hdcSrc,//?源設備環境(包括要顯示的bmp位圖)
int?nXSrc,?//?當前位圖中顯示的起始x位置。
int?nYSrc?//?當前位圖中顯示的起始y位置。
DWORD?dwRop//?映射模式
);以下是源代碼:
//顯示bmp位圖
# include & ltwindows.h & gt
#包含“resource.h”
LRESULT?回調?WndProc(HWND,UINT?WPARAM,?LPARAM);
作廢?draw brick();?
int?WINAPI?WinMain(hin instance?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;
wnd class . h instance =?hInstance
wndclass.hIcon =?LoadIcon(NULL,IDI _應用);
wnd class . h cursor =?LoadCursor(NULL,IDC _ ARROW);
wnd class . HBR background =?(HBRUSH)GetStockObject(WHITE _ BRUSH);
wndclass.lpszMenuName =?NULL
wnd class . lpsz class name =?szAppName
如果(!register class(& amp;wndclass))
{
MessageBox(NULL,正文(“這個?程序?要求?Windows?NT!”),
szAppName,?MB _ icon error);
回歸?0;
}
hwnd?=?CreateWindow(szAppName,
正文(" Bmp?Demo”),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
754,
566,
空,
空,
hInstance,
NULL);
顯示窗口(hwnd,icmd show);
更新窗口(hwnd);
while(GetMessage(& amp;味精,?NULL,?0,?0))
{
翻譯消息(& amp味精);
dispatch message(amp;味精);
}
回歸?msg.wParam
}
LRESULT?回調?WndProc(HWND?hwnd,?UINT?消息,?WPARAM?wParam,?LPARAM?lParam)
{
staticHBITMAPhBitmap//位圖句柄表示位圖。
靜電?intcxBitmap,?cyBitmap//位圖的長度和寬度
BITMAPbitmap
HDChdc,?hdcMem
HINSTANCEhInstance
PAINTSTRUCTps
開關(消息)
{
案子?WM_CREATE:
hInstance?=?((LPCREATESTRUCT)lParam)-& gt;hInstance//獲取窗口的實例句柄
hBitmap?=?LoadBitmap(hInstance,MAKEINTRESOURCE(IDB _ bitmap 1));//將位圖加載到內存
GetObject(hBitmap,sizeof(位圖),?& amp位圖);
cxBitmap?=?bitmap . BM width;//獲取位圖的長度
cyBitmap?=?bitmap . BM height;//獲取位圖的寬度
回歸?0?;
案子?WM_PAINT:
hdc?=?BeginPaint(hwnd,& ampPS);
hdcMem?=?CreateCompatibleDC(hdc);//創建壹個兼容HDC設備環境描述表的hdcMEM,主要用於在內存中截圖。
SelectObject(hdcMem,hbit map);?//選擇位圖放入hdcMem。
BitBlt(hdc,?-1,?-1,?cxBitmap,?cyBitmap,?hdcMem,?0,?0,?src copy);//繪制bmp位圖
DeleteDC(hdc mem);
EndPaint(hwnd,& ampPS);
回歸?0;
案子?WM_DESTROY:
delete object(hbit map);
PostQuitMessage(0);
回歸?0;
}
回歸?DefWindowProc(hwnd,消息,?wParam,?lParam);
}程序運行效果:
希望能幫到妳。
ps:
附件是整個項目,壹個用vs2008創建的項目,包含相應的資源。