亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 第1小節(jié).txt

?? 游戲編程起源...中文版
?? TXT
字號:
   
  
 傻馬亂踢 編譯   
 
 
  
游戲編程起源(初學(xué)者)Ⅰ
 
 

★第一章 Windows編程基礎(chǔ)

☆ 簡介
本章目的是介紹WINDOWS編程基礎(chǔ)。在本章結(jié)束時,你應(yīng)該能夠很好的工作了,雖燃可能是簡單的WINDOWS程序。你需要有C語言的基礎(chǔ)知識,我很少將C++的代碼擴(kuò)充到程序中。當(dāng)然,由于WINDOWS本身就是面向?qū)ο蟮?,一點(diǎn)類的知識是不會對你有什么損害的。如果你不熟悉C++,沒有關(guān)系,我想你還是能從我這里學(xué)到大部分的東西。所有的程序代碼都通過了MICROSOFT VISUAL C++6.0的編譯,如果你還沒有合適的編譯器,弄一個同我一樣的好了,它還是很棒的。開動吧!
☆ 開始
多數(shù)的Windows程序都需要Windows.h和Windowsx.h這兩個頭文件,要確保使用它們。當(dāng)然,你還需要其它的標(biāo)準(zhǔn)的C的頭文件,象stdio.h,conio.h等。除了這些,你還會經(jīng)??吹皆诔绦虻拈_始有這樣一行代碼:
#define WIN32_LEANAND_MEAN
它表示W(wǎng)indows的頭文件中將拒絕接受MFC的東西,這將加速你的build時間。如果你從沒有打算應(yīng)用MFC在你的游戲編程中,那就使用它吧。如果你以前從沒有看過這種聲明類型——在#define后,直接加上一個“單詞”,那么它的作用就是有條件編譯??纯聪旅娴睦樱?
#ifdef DEBUG_MODE
    printf("Debug mode is active!");
#endif

意思是:如果程序的開始包含#define DEBUG_MODE,那么就printf(),否則退出。這個對于你跟蹤程序的邏輯錯誤是很有幫助的。

☆ WinMain()函數(shù)

DOS下的C語言從main()開始,Windows下的C語言從WinMain()開始,一個空的WinMain()函數(shù)是這樣的:

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    return(0);
} 
一個函數(shù)即使什么也沒做,也應(yīng)該返回一個值。是的,有好多東西我們不熟悉。首先的首先,WINAPI是個什么聲明?WINAPI是在windows.h頭文件中定義的一個宏,它把函數(shù)調(diào)用翻譯成正確的調(diào)用約定。當(dāng)我們在程序中需要用到匯編語言的時候,我們在來深究它好了,記住,如果要用WinMain(),就必須要有WINAPI。

下一步讓我們來看看括號里的四個參數(shù):
◎ HINSTANCE hinstance:HINSTANCE是一個句柄類型的標(biāo)識符。變量hinstance是一個整數(shù),用于標(biāo)識程序?qū)嵗indows設(shè)置這個參數(shù)的值,并把它傳遞給你的程序代碼。很多Windows函數(shù)都要用到它。
◎ HINSTANCE hPreInstance:你不用擔(dān)心這個參數(shù),它已經(jīng)被廢掉了。它只是為古老的Windows版本服務(wù)的。你將還會看到類似的情況。
◎ LPSTR lpCmdLine:是一個指向字符串的指針,它僅在程序名是從DOS命令行輸入或是從Run對話框中輸入時才起作用。因此,很少被程序代碼所用。
◎ int nCmdShow:決定了窗口在初始顯示時的狀態(tài)。Windows通常給這個參數(shù)分配一個值。通常是SW_打頭的一個常量。例如SW_SHOWNORMAL表示默認(rèn)狀態(tài),SW_MAXIMIZE或SW_MINIMIZE分別表示最大和最小模式等等。

以上大體上是WinMain()的參數(shù)的介紹。下面對變量、參數(shù)、常量、類等的命名方法介紹一下。

☆ 匈牙利命名法
【不翻譯這一段了,相關(guān)的資料很多】

☆ 消息
當(dāng)你在DOS下編程的時候,你不必?fù)?dān)心其它程序的運(yùn)行,因?yàn)镈OS是獨(dú)占模式。但你在Windows平臺上編程時,你不得不考慮其它正在運(yùn)行的程序。鑒于此,Windows通過“消息”來連接操作申請和具體操作。簡單的說,就是我們指示程序或程序本身向Windows發(fā)出諸如移動窗口、放大窗口、關(guān)閉窗口等地申請,Windows再根據(jù)申請,考察實(shí)地情況,拒絕或發(fā)出指令,讓程序(計算機(jī))作出相應(yīng)的動作。再例如,鼠標(biāo)隨時向Windows發(fā)出消息,匯報光標(biāo)位置,左鍵或右鍵是否按下等,Windows再根據(jù)消息作出相應(yīng)的反應(yīng)??傊瑹o論何時,Windows都要隨時掌控所有的消息,而且,Windows是一直不斷地接收到各種消息。
這種功能是通過一種被命名為CALLBACK函數(shù)類型實(shí)現(xiàn)的。不用害怕,消息的傳遞來,傳遞去都是由Windows自己完成的,你只要聲明一個CALLBACK函數(shù)就可以了,就像WINAPI用在WinMain()前一樣。如果還沒有明白,不要緊,往下看你就明白了?,F(xiàn)在,我要離開這個話題一會,因?yàn)槟阒挥邢冉⒋翱冢╓indows),傳遞消息才有可能實(shí)現(xiàn)。

☆ 窗口類
現(xiàn)在談?wù)撘稽c(diǎn)C++的知識,因?yàn)橐虢⒁粋€窗口,你就得先建立一個窗口類。窗口類包含所有的有關(guān)窗口的信息,如用什么樣的鼠標(biāo)符號,菜單樣式等等。開發(fā)任何一個窗口程序,都離不開窗口類的建立。為了達(dá)到此目的,你必須填寫WNDCLASSEX結(jié)構(gòu)。EX的意思是“擴(kuò)充”的意思,因?yàn)橛幸粋€老的結(jié)構(gòu)叫作WNDCLASS,這里,我們將使用WNDCLASSEX結(jié)構(gòu),它的樣子如下:

typedef struct _WNDCLASSEX {
        UINT cbSize;
        UINT style;
        WNDPROC lpfnWndProc;
        int cbClsExtra;
        int cbWndExtra;
        HANDLE hInstance;
        HICON hIcon;
        HCURSOR hCursor;
        HBRUSH hbrBackground;
        LPCTSTR lpszMenuName;
        LPCTSTR lpszClassName;
        HICON hIconSm;
} WNDCLASSEX;

這個結(jié)構(gòu)有不少成員,討厭的是,你必須為窗口類設(shè)置每一個成員。莫發(fā)愁,紙老虎一個。讓我們來個速成。
※ UINT cbSize:指定了以字節(jié)為單位的結(jié)構(gòu)的大小。這個成員是通過sizeof(WNDCLASSEX)實(shí)現(xiàn)的。你將會經(jīng)??吹剿?,尤其是你使用了DirectX。
※ UINT style:指定了窗口的風(fēng)格。它經(jīng)常被以CS_打頭的符號常量定義。兩種或兩種以上的風(fēng)格可以通過C語言中的“或”(|)運(yùn)算符加以組合。大多數(shù)情況我們只應(yīng)用四種風(fēng)格,出于對文章長度的考慮,我們只列出這四種。若你還需要其它的,到MSDN里找一下好了。別告訴我你用的不是Visual C++??!
◎ CS_HREDRAW:一旦移動或尺寸調(diào)整使客戶區(qū)的寬度發(fā)生變化,就重新繪制窗口。
◎ CS_VREDRAW:一旦移動或尺寸調(diào)整使客戶區(qū)的高度發(fā)生變化,就重新繪制窗口。
◎ CS_OWNDC:為該類中的每一個窗口分配一個唯一的設(shè)備上下文。
◎ CS_DBLCLKS:當(dāng)用戶雙擊鼠標(biāo)時向窗口過程發(fā)送雙擊消息。
※ WNDPROC lpfnWndProc:是指向窗口過程的指針。一般都指向CALLBACK函數(shù)。如果你沒有用過函數(shù)指針,簡單理解為函數(shù)的地址就是函數(shù)的名字,名字后面別帶括號。
※ int cbClsExtra:它是為類保留的額外信息 。大多數(shù)程序員不用它,你在在寫游戲程序時也不太可能用它,所以,設(shè)為0好了。
※ int cbWndExtra:同上一個差不多,設(shè)為0好了。
※ HANDLE hInstance:是指向窗口過程實(shí)例的句柄。同時也是WinMain()函數(shù)的參數(shù)之一。應(yīng)該設(shè)置為hinstance。
※ HICON hIcon:指向窗口圖標(biāo)的句柄,它通常被LoadIcon()函數(shù)設(shè)置。在你學(xué)會如何在你的程序中使用資源前,你先設(shè)置成如下樣子:LoadIcon(NULL,IDI_WINLOGO)。當(dāng)然,還有一些其它的IDI_打頭的符號常量,你自己去幫助文件里找吧。


※ HCURSOR hCursor:指向窗口光標(biāo)的句柄,它通常被LoadCursor()函數(shù)設(shè)置,在你學(xué)會如何在你的程序中使用資源前,你先用Windows默認(rèn)的吧,LoadCursor(NULL,IDC_ARROW)。
※ HBRUSH hbrBackground:當(dāng)你的窗口過程得到消息,要求刷新(或重畫)窗口時,至少要用一種純色或“brush”(畫刷)重畫窗口區(qū)域,畫刷是由參數(shù)確定的。你可以使用GetStockObject()函數(shù)調(diào)用幾種常備的畫刷,如BLACK_BRUSH, WHITE_BRUSH, GRAY_BRUSH等?,F(xiàn)在,你就用GetStockObject(BLACK_BRUSH)吧。對不起,你可能覺得我說的太簡單了,但我不想把開始弄得太復(fù)雜。我在以后的篇幅里會詳細(xì)講的,我保證。
※ LPCTSTR lpszMenuName:如果你想建立一個有下拉菜單的窗口,你得給這個參數(shù)賦一個菜單名稱(這涉及到資源),由于你還不知道怎么創(chuàng)建菜單,你就先用NULL設(shè)置成一個沒有菜單的窗口吧。
※ LPCSTR lpszClassName:很顯然,你需要給類起個名字,隨你便,如“TMD”。要用雙引號引上??!
※ HICON hIconSm:指向小圖標(biāo)的句柄。小圖標(biāo)用來顯示在窗口的標(biāo)題欄里。要用到LoadIcon()函數(shù),現(xiàn)在,你就用Windows默認(rèn)的吧,LoadIcon(NULL,IDI_WINLOGO)。
好了,你關(guān)于WNDCLASSEX結(jié)構(gòu)知道的差不多了,你可以自己設(shè)置它了。下面是一個例子:

WNDCLASSEX sampleClass; // declare structure variable 
sampleClass.cbSize = sizeof(WNDCLASSEX); // always use this!
sampleClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; // standard settings
sampleClass.lpfnWndProc = MsgHandler; // we need to write this!
sampleClass.cbClsExtra = 0; // extra class info, not used
sampleClass.cbWndExtra = 0; // extra window info, not used
sampleClass.hInstance = hinstance; // parameter passed to WinMain()
sampleClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows logo
sampleClass.hCursor = LoadCursor(NULL, IDC_ARROW); // standard cursor
sampleClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // a simple black brush
sampleClass.lpszMenuName = NULL; // no menu
sampleClass.lpszClassName = "Sample Class" // class name
sampleClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Windows logo again
【“//”后面的我就不翻譯了】

我想,你已經(jīng)有點(diǎn)兒不太崇拜Windows程序員了。言歸正傳,有一點(diǎn)我得提醒你,注意函數(shù)GetStockObject()前的(HBRUSH)類型配置,這是因?yàn)镚etStockObject()可以調(diào)用其它的對象,不僅僅是“brush”,所以你需要一個HBRUSH類型配置。在Visual C++舊版本里不用配置,但新的6.0版本需要它,否則會編譯出錯。
下一件事是注冊這個窗口類,只有這樣,你才能創(chuàng)建新的窗口。十分簡單,你只需要調(diào)用一個RegisterClassEX()函數(shù),它只有一個參數(shù),就是你的窗口類的地址(名字),根據(jù)我上面給的例子,這里應(yīng)該這樣:
RegisterClassEx(&sampleClass);
嗨,我們的窗口類創(chuàng)建完了,我們可以用它創(chuàng)建一個窗口了。只是時間問題嘍!

☆ 創(chuàng)建窗口
待續(xù)。。。。
 
 
 
  
  
 
 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区无线| 国产成人av电影在线| 狠狠色丁香久久婷婷综| 91麻豆6部合集magnet| 欧美成人在线直播| 国产精品久久久久久妇女6080 | 日韩一级在线观看| 中文字幕亚洲综合久久菠萝蜜| 日本欧美肥老太交大片| 色香蕉成人二区免费| 精品福利视频一区二区三区| 亚洲第一电影网| 色综合视频在线观看| 国产精品免费视频一区| 国产伦精品一区二区三区免费迷| 欧美性欧美巨大黑白大战| 国产精品久久久久久亚洲毛片| 久草这里只有精品视频| 91精品婷婷国产综合久久性色| 亚洲色图在线视频| 白白色 亚洲乱淫| 日本一区二区三区四区| 国产在线精品视频| 精品国产三级电影在线观看| 奇米色一区二区三区四区| 欧美日韩在线播放一区| 一区二区三区四区精品在线视频| 成人18视频在线播放| 中文字幕的久久| 成人av动漫网站| 国产欧美1区2区3区| 国产在线一区二区综合免费视频| 日韩视频在线观看一区二区| 日精品一区二区三区| 欧美伦理视频网站| 婷婷成人综合网| 91精品免费在线| 免费久久精品视频| 2017欧美狠狠色| 国产成人在线观看| 国产精品传媒在线| 99国产精品久| 亚洲国产视频网站| 欧美美女激情18p| 奇米精品一区二区三区在线观看 | 粉嫩高潮美女一区二区三区| 精品成人佐山爱一区二区| 久久99九九99精品| 亚洲欧美日韩国产中文在线| 国产精品视频免费| 色综合激情久久| 欧美中文字幕不卡| 欧美大胆一级视频| 成人爽a毛片一区二区免费| 中文字幕永久在线不卡| 91久久精品一区二区二区| 制服丝袜av成人在线看| 国产精品88av| 亚洲女人****多毛耸耸8| 9191成人精品久久| 国产69精品一区二区亚洲孕妇| 国产精品你懂的在线欣赏| 在线欧美一区二区| 久久精品久久精品| 亚洲视频精选在线| 日韩一区二区中文字幕| 国产91精品一区二区麻豆亚洲| 亚洲欧美日韩在线播放| 日韩视频永久免费| 91在线小视频| 久久福利资源站| 一区二区三区在线免费观看| 日韩精品一区二区三区在线观看| 国产精品99久久不卡二区| 一区二区欧美国产| 久久久一区二区三区捆绑**| 在线观看av一区| 国产成人丝袜美腿| 日韩福利电影在线| 亚洲三级在线免费| 精品成人免费观看| 欧美丝袜丝交足nylons| 国产麻豆日韩欧美久久| 婷婷综合另类小说色区| 国产精品国产精品国产专区不蜜| 日韩天堂在线观看| 欧美视频一区二| av一二三不卡影片| 国产精品影视网| 美女爽到高潮91| 午夜欧美2019年伦理| 亚洲人成7777| 国产精品每日更新在线播放网址| 91精品一区二区三区久久久久久| 色综合久久中文综合久久97| 高清在线观看日韩| 国模无码大尺度一区二区三区| 日韩制服丝袜先锋影音| 亚洲国产中文字幕在线视频综合| 中文字幕一区二区在线播放| 精品国产91乱码一区二区三区| 欧美日韩免费一区二区三区| 在线视频一区二区免费| 9久草视频在线视频精品| 国产激情精品久久久第一区二区| 精品综合久久久久久8888| 日本中文字幕一区二区视频 | 亚洲成人av一区二区三区| 亚洲精品国产无天堂网2021 | 老司机精品视频一区二区三区| 亚洲成人激情av| 性感美女极品91精品| 亚洲国产中文字幕在线视频综合| 亚洲精品视频一区二区| 亚洲精品国产一区二区精华液| 一区二区三区四区视频精品免费 | 精品国产伦一区二区三区观看体验| 欧美日本一区二区三区四区| 欧美日韩一区视频| 欧美日韩不卡一区| 欧美一区二区三区四区高清| 欧美一级免费观看| 精品国产一二三区| 久久女同性恋中文字幕| 亚洲国产电影在线观看| 亚洲欧美欧美一区二区三区| 亚洲人xxxx| 亚洲va天堂va国产va久| 日韩和的一区二区| 国产一级精品在线| eeuss影院一区二区三区| 91看片淫黄大片一级在线观看| 91麻豆精品在线观看| 欧美日韩国产bt| 日韩欧美第一区| 中文字幕不卡在线播放| 亚洲精品网站在线观看| 日韩成人伦理电影在线观看| 国产一区二区电影| av亚洲精华国产精华| 欧美日韩成人高清| 国产女人18毛片水真多成人如厕| 国产精品国产三级国产aⅴ无密码| 亚洲精品免费视频| 韩国精品在线观看| 99久久精品免费看国产免费软件| 欧美性猛交一区二区三区精品 | 欧美日韩一区二区在线观看| 日韩欧美一二区| 国产精品成人免费精品自在线观看| 亚洲美女视频一区| 久久精品99国产精品| 99热99精品| 欧美一级片在线观看| 日韩美女视频一区| 久久99久久精品| 一本色道久久综合亚洲aⅴ蜜桃| 91精品国产手机| 国产精品白丝在线| 老色鬼精品视频在线观看播放| 92精品国产成人观看免费| 日韩你懂的电影在线观看| 亚洲人亚洲人成电影网站色| 久久精品国产成人一区二区三区| 色94色欧美sute亚洲13| 久久免费视频一区| 日韩制服丝袜av| 91片在线免费观看| 久久精品在线观看| 麻豆久久久久久久| 欧美日韩在线观看一区二区 | 一区二区三区久久久| 国产在线精品一区二区不卡了| 欧美日韩亚洲综合| 国产精品久久久久久久裸模| 捆绑调教一区二区三区| 91麻豆精品国产综合久久久久久 | 欧美激情一区不卡| 日本不卡不码高清免费观看| 色网站国产精品| 亚洲国产成人在线| 国产精品白丝jk黑袜喷水| 欧美一区二区三区啪啪| 亚洲妇熟xx妇色黄| 91福利在线观看| 亚洲日本在线天堂| 91视视频在线观看入口直接观看www | 国产精品99久久久久久久女警 | 欧美日韩不卡一区| 一区二区成人在线观看| av不卡在线播放| 国产欧美一区二区在线观看| 精品一区二区成人精品| 精品国产一区二区精华| 久久不见久久见中文字幕免费| 欧美精品一二三区| 日韩国产精品91| 日韩午夜激情视频| 亚洲免费观看视频| 在线视频综合导航|