在程序中加載位圖有很多方法,各有各的好處。這里簡單說一下在資源里和文件里加載的區別。
第一、在資源里加載位圖
這種方法就是在工程里的“資源視圖”-->“添加資源”-->"Bitmap"-->"導入位圖"
每個資源都會有一個資源ID,使用位圖時就通過資源ID對他進行控制。
然后在設置背景圖片是只需在OnPaint();里添加如下
CPaintDC dc(this); CRect rc; GetClientRect(&rc); CDC memDC;//目標內存 memDC.CreateCompatibleDC(&dc);//創建內存兼容環境 CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1);//資源ID BITMAP bitmap; bmpBackground.GetBitmap(&bitmap);//獲取位圖 CBitmap *oldbtimap = memDC.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);//
這樣直接運行就可以顯示位圖了,但是有個缺點就是,如果位圖比較大的話,最終生成的應用程序會很大,位圖會包含在exe程序中,如果位圖比較多的話,應用程序的大小就比較恐怖了,估計要幾十兆了。
第二、在文件中直接加載
這種方法用到函數LoadImage();//從文件中加載位圖
1 HANDLE WINAPI LoadImage( 2 _In_opt_ HINSTANCE hinst,//實例句柄 3 _In_ LPCTSTR lpszName,//文件名 4 _In_ UINT uType,//文件類型,包括IMAGE_BITMAP,IMAGE_CURSOR,IMAGE_ICON 5 _In_ int cxDesired,//這個在加載ICON時使用 6 _In_ int cyDesired,// 7 _In_ UINT fuLoad//加載的方式 ,如LR_LOADFROMFILE 8 );
使用方法如下:
1 CPaintDC dc(this); 2 CRect rc; 3 GetClientRect(&rc); 4 5 CBitmap bmpBackground; 6 bmpBackground.DeleteObject(); 7 HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,L"Background.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//加載位圖 8 bmpBackground.Attach(hBitmap);//綁定 9 10 CDC memDC;//目標內存 11 memDC.CreateCompatibleDC(&dc);//創建內存兼容環境 12 memDC.SelectObject(bmpBackground.m_hObject);// 13 dc.BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);
這種方法加載位圖只需將圖片和應用程序放在同一個目錄下,生成的應用程序不會和位圖產生太大的關聯,會很小,而且還可以自己替換背景圖片。
總結一下,感覺還是第二種方法比較方便,生成的應用程序很小,位圖可以自己替換。