考:http://blog.csdn.net/zhmxy555/article/details/7335103
將位圖從文件加載帶繪圖窗口中必須經過一下幾個步驟。
<1>從文件中加載位圖對象
<2>建立一個與窗口DC兼容的內存DC
<3>內存DC只用步驟1中所建立的位圖對象
<4>將內存DC的內容粘貼到窗口DC中,完成顯像操作
要從文件加載位圖,常常使用LoadImage()函數。
HANDLE LoadImage(
HINSTANCE hinst, //包含目標位圖的DLL或exe文件的模塊句柄
LPCTSTR lpszName,
UINT uType,
int cxDesired,
int cyDesired,
UINT fuLoad
);
步驟二:建立與窗口DC兼容的內存DC
我們調用CreateCompatible()函數來建立內存DC
HDC CreateCompatibleDC(HDC hdc); //建立兼容DC
函數中輸出的唯一參數就是要與內存DC兼容的目的DC
跟窗口DC一樣,內存DC使用後也必須進行釋放的操作,釋放內存DC所調用的函數爲DeleteDC()
DeleteDC(HDC DC名稱); //釋放DC
步驟二:建立與窗口DC兼容的內存DC
我們調用CreateCompatible()函數來建立內存DC
HDC CreateCompatibleDC(HDC hdc); //建立兼容DC
函數中輸出的唯一參數就是要與內存DC兼容的目的DC
跟窗口DC一樣,內存DC使用後也必須進行釋放的操作,釋放內存DC所調用的函數爲DeleteDC()
DeleteDC(HDC DC名稱); //釋放DC
步驟三:選用位圖對象
位圖對象是GDI的6種對象之一,內存DC選用位圖對象的方法和前面介紹的選用畫筆或畫刷的方式相同,都是通過調用SelectObject()函數來實現。
步驟四:貼圖
把內存DC中的位圖複製到顯示的DC上,即"貼圖"。這個操作使用的函數是BitBlt(),後面我們會經常用到他。這個函數的定義如下
BOOL BitBlt(
int x, // 目的DC x座標
int y, // 目的DC y座標
int nWidth, // 貼到目的DC的寬度
int nHeight, // 貼到目的DC的高度
CDC* pSrcDC, // 來源DC
int xSrc, // 來源DC x座標
int ySrc, // 來源DC y座標
DWORD dwRop // 貼圖方式();
);
步驟三:選用位圖對象
位圖對象是GDI的6種對象之一,內存DC選用位圖對象的方法和前面介紹的選用畫筆或畫刷的方式相同,都是通過調用SelectObject()函數來實現。
步驟四:貼圖
把內存DC中的位圖複製到顯示的DC上,即"貼圖"。這個操作使用的函數是BitBlt(),後面我們會經常用到他。這個函數的定義如下
BOOL BitBlt(
int x, // 目的DC x座標
int y, // 目的DC y座標
int nWidth, // 貼到目的DC的寬度
int nHeight, // 貼到目的DC的高度
CDC* pSrcDC, // 來源DC
int xSrc, // 來源DC x座標
int ySrc, // 來源DC y座標
DWORD dwRop // 貼圖方式();
);
。這些 基本內容 , 都參考自其它文章。
下面是自己 編寫例子的心得:
首先 我們需要建立一個 windows 窗體。
WNDCLASSEX wcex;
...
RegisterClassEx(&wcex);
然後:進行 界面的初始化
hDc = GetDC(hWnd); //
mdc = CreateCompatibleDC(hDc); //建立內存DC
hbmp = (HBITMAP)LoadImage(NULL,
"bg.bmp",
IMAGE_BITMAP,
800,
600,
LR_LOADFROMFILE
); //從文件中載人位圖
SelectObject(mdc,hbmp);
BitBlt(hdc,0,0,800,600,mdc,0,0,SRCCOPY); //最後一個參數表示融合方式
ReleaseDC(hWnd,hDc);
這樣的話,就可以建立一個簡單的以位圖爲背景的應用程序了。
ReleaseDC(hWnd,hDc);ReleaseDC(hWnd,hDc);