日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【Visual C++】游戏开发笔记之五——游戏画面绘图(二)绘制位图

發布時間:2025/3/20 c/c++ 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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++】游戏开发笔记之五——游戏画面绘图(二)绘制位图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。