【Visual C++】游戏开发笔记之五——游戏画面绘图(二)绘制位图
本系列文章由zhmxy555編寫,轉載請注明出處。?http://blog.csdn.net/zhmxy555/article/details/7335103
作者:毛星云????郵箱:?happylifemxy@qq.com????歡迎郵件交流編程心得
以游戲文件來說,使用的位圖數量相當多,因此都會先將位圖存成文件,等到程序需要時再將文件加載到窗口中。將位圖從文件加載帶繪圖窗口中必須經過一下幾個步驟。
<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??????
);
下面是該函數參數的詳細說明。
▲HINSTANCE??來源實體:包含位圖所在的實體,若要加載的位圖在硬盤或者資源文件中,此項設置為"NULL"。
▲LPCTSTR?名稱:要加載的位圖所在的路徑與文件名或者資源名稱
▲UINT?位圖類型:加載位圖的類型,有下面三種:
★IMAGE_BITMAP:?加載的位圖為一般圖文件,擴展名為".bmp"
★IMAGE_CUSOR:?加載的位圖為光標圖標,擴展名為".cur"
★IMAGE_ICON:?加載的位圖為圖標,擴展名為".ico"
▲int?加載寬度:位圖加載的寬度,單位為像素
▲int?加載高度:位圖加載的高度,單位為像素
▲UINT?加載方式:設定位圖的加載方式,若是從文件中加載位圖,則設為"LR_LOADFROMFILE"
步驟二:建立與窗口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??//??貼圖方式();
);
下面我們用一個實例來看看如何從文件中加載位圖:
#include "stdafx.h" #include "stdafx.h" //全局變量聲明 HINSTANCE hInst; HBITMAP hbmp; HDC mdc; //全局函數的聲明 ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void MyPaint(HDC hdc); //**** ?著作權歸作者所有:來自51CTO博客作者poem淺墨的原創作品,如需轉載,請注明出處,否則將追究法律責任 c++ 游戲 擴展
0
微博 QQ 微信收藏
上一篇:【超級經典】程序員裝B指南(轉) 下一篇:寫好代碼的一些基本原理 poem淺墨121篇文章,8W+人氣,0粉絲
轉載于:https://blog.51cto.com/8241237/1348051
總結
以上是生活随笔為你收集整理的【Visual C++】游戏开发笔记之五——游戏画面绘图(二)绘制位图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Opencv 图像叠加 添加水印
- 下一篇: SQL基础--层次化查询(START B