首先介紹loadp_w_picpath函數:
現在的loadp_w_picpath函數已經取代了loadbitmap函數,可能看比較老的書本上會用後者,這二個函數都比較簡單,參數也不多,隨便寫個實例如下,這樣可能懂得比較快:
- LoadImage(NULL,"bitmap1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
第一個爲一個實例的句柄,
第二個爲載入的文件名,
第三個爲類型,它支持位圖,光標等的載入,
其它幾個參數基本現在不用,大家可以去看看具體的含義,
下面說下載入的過程:
用CreateCompatibleDC函數來創建個兼容的內存DC,它返回一個兼容DC句柄,
然後把資料載入內存,用loadImage,它會返回當前資源的句柄,HANDLE類型,
再然後獲取資源對象的信息,用GetObject(HDC,size,BITMAP),
第一個參數爲DC的句柄,肯定是用前面兼容DC創建的句柄,
第二個參數爲BITMAP的大小,sizeof(BITMAP);
第三個參數爲一個BITMAP的類型變量,系統會把資源信息住裏面填充信息,比如資源的大小,
信息都有了之後就可以把位圖選進設備描述表了,有的叫設備上下文。
使用SelectObject(HDC,HGDIOBJ);
第一個參數爲往那個設備句柄載入,這裏爲前面CreateCompatibleDC創建的句柄。
第二個參數爲載入的資源句柄,這裏爲loadp_w_picpath返回的句柄
最後就是顯示了,
用BitBlt函數來顯示你載入的圖片到顯示器上。
參數有點長,就不寫了,下面寫上全部的載入代碼吧,非常的簡單:
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hwnd,&ps);
- HDC hdcmem = CreateCompatibleDC(hdc);
- HANDLE hbitmap = LoadImage(NULL,"bitmap1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
- BITMAP bmap;
- GetObject(hbitmap,sizeof(BITMAP),&bmap);
- SelectObject(hdcmem,hbitmap);
- BitBlt(hdc,11,11,bmap.bmWidth,bmap.bmHeight,hdcmem,0,0,SRCCOPY);
- DeleteDC(hdcmem);
- DeleteObject(hbitmap);
- EndPaint(hwnd,&ps);
- return 0;
- }
而用loalbitmap函數,其實也差不多的,只不要它一個instance句柄。
OK,Over!