1、將位圖加載到內存DC中
2、將內存DC中的內容繪制到要顯示位圖的DC中
*MFC中沒有直接用來加載位圖的函數,可以使用WindowsAPI中的
LoadImage函數來加載位圖,其原型如下:
HANDLE LoadImage(
HINSTANCE hinst, //位圖實體句柄,若位圖在硬盤或者資源文件
//中,則將該參數設為NULL
LPCTSTR lpszName, //位圖所在路徑及文件名,或者資源名稱
UINT uType, //加載位圖的類型:
//1、IMAGE_BITMAP
//2、IMAGE_CURSOR
//3、IMAGE_ICON
int cxDesired, //位圖寬度,像素
int cyDesired, //位圖高度,像素
UINT fuLoad //加載方式比如LR_LOADFROMFILE等
);
步驟:
CClientDC dc(this);
CDC *mdc=new CDC;
//CDC只有空構造函數,也就是說無法通過拷貝函數來構造一個
//與dc相同的mdc,即mdc=dc非法。
//CreateCompatibleDC建立一個適合指定pDC的內存設備上下文
mdc->CreateCompatibleDC(&dc);
CBitmap bitmap;
//CBitmap繼承自CGdiObject
//其成員變量m_hObject是一個句柄
//A HANDLE containing the HBITMAP, HPALETTE, HRGN, HBRUSH, HPEN, or HFONT
//attached to this object.
//可以簡單記為bitmap擁有HBITMAP類型句柄m_hObject,而該句柄需要使用
//Windows API的LoadImage獲得
bitmap.m_hObject=(HBITMAP)::LoadImage(NULL,"b1.bmp",IMAGE_BITMAP,500,400,LR_LOADFROMFILE);
mdc->SelectObject(bitmap);
CRect rect;
//取得客戶區域大小
GetClientRect(&rect);
//BitBlt()將位圖貼到要顯示的DC
dc.BitBlt(0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY);
//最後要記得在析構函數中釋放mdc
delete mdc