Windows 下 繪製位圖

考: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);

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章