遊戲編程大師技巧—windows程序的基本構造

空餘時間拿出來學習遊戲開發時間其樂無窮的事情有木有,當然不能被導師抓住,我是專心做學術的好孩子。。

任何一個程序的人生應該是從一句dos控制檯的hello word 開始的,而windows的程序應該從一個最簡單的窗體開始。

首先吐槽一下微軟編程的匈牙利風格,實在不習慣隨便大小寫切換。。。

就像一個最簡單的cpp程序都是從main()開始一樣,window程序總是從WinMain()(再次吐槽一下匈牙利。。)開始的。

我們從一個最簡單的windows程序開始解剖它。

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include<windowsx.h>

int WINAPI WinMain(HINSTANCE hinstance,
	HINSTANCE hprevinstance,
	LPSTR lpcmdline,
	int ncmdshow)
{MessageBox(NULL,"you donnot love me!!",
"hello,cs_unsky",MB_OK|MB_ICONEXCLAMATION);
return(0);
}
#define WIN32_LEAN_AND_MEAN創建一個windows程序有兩種方式,一種是使用微軟基礎類庫(Microsoft Foundation Class,)就是傳說中的mfc(順便再吐槽一下某大牛寫的一篇mfc興亡論,過多的冗餘和內嵌是這個類庫的敗筆,菜鳥還是隻會用就好了、、),另一種就是軟件開發工具包就是我們經常說的sdk 而這句話的作用就是告訴編譯器我們用的是sdk開發,而不是用的MFC,(我們也跟不需要MFC的內容)!

接下來就是

#include<windows.h>

#include<windowsx.h>

我曾因爲一個關鍵詞的錯誤而去查詢了一下這兩個頭文件的區別,這兩個都是基本的window文件,其實在windows.h中包含了很多很多的庫文件,具體調用可以偷懶這樣一句概括,而windowsx.h這個頭文件查閱文檔說有許多重要的宏和常量的頭文件。等有興趣的時候可以具體的看看他的源碼。



int WINAPI WinMain(HINSTANCE hinstance,
	HINSTANCE hprevinstance,
	LPSTR lpcmdline,
	int ncmdshow)
作爲程序的入口第一次入手總會想,我草,參數好多。

首先WINAPI聲名符,它強制了參數從左到右傳遞,而不是象CDECL聲名符那樣從又到左傳遞。

沒啥可說的記住即可:

int WINAPI WinMain(HINSTANCE hinstance,
	HINSTANCE hprevinstance,
	LPSTR lpcmdline,
	int ncmdshow)

WINAP從左到右

CDECL 從右到左

一下是每個參數的具體意義:

hinstance 這個參數是一個windows爲你的應用程序生成的實例句柄,實例是用來跟蹤資源的指針或數。

hprevinstance   哈哈哈哈,在我學習這個時候是2015年,微軟已經廢棄了這個參數!!好開森有木有。。

lpcmdline   這個參數是一個空的終止字符串,回想一下標準的c++main函數的參數 main(int argc,char**argv)很相似有木有。。不過不同的是,它沒有一個單獨的參數來向argc那樣指出命令行參數個數。

ncmdshow最後的這個參數是個整數,傳給應用程序,這樣用戶就有點人機交互的意思。。。如果你這麼認爲的話,話說最討厭一堆的參數有木有,算了,反正我也記不住,以後自己回來看。。

下面開始比較有成就感的代碼段:

int  MessageBox(HWND hwnd,

LPCTSTR lptext,

UINT UTYPE);

hwnd 這是信息框連接的窗口句柄,我們可以設置成NULL那麼你眼前的這個大桌面就成了這個窗口的父親。

lptext 就是這個信息框的名字。

lpcaption  就是這個框裏顯示什麼。

utype  他決定了要現實的信息框,微軟大爺給我們提供了五花八門的信息框,恩,window上你見過的任何一種窗口標誌你都可以通過這個調用,反正記不住,以後用着具體查詢。

好了跑一下這個程序。

對了爲了避免vs2010這編譯器出現亂七八糟的錯誤,還是修改下編譯器的參數爲好。


首先在項目屬性的清單工具裏的輸入輸出選項中的嵌入清單選擇否!這樣就可以避開很嚴重的編譯錯誤,具體原因我查詢了,但是我忘記了。。。

另一個很無語的是vs2010默認是使用unicode編譯的,但是我們需要的是多字符集,所以需要在項目屬性的常規裏面把字符集調整成多字符集。



然後我們就可以跑起來我們的第一個窗體了。

恩效果就是這個樣子的。


好了。有時間寫window窗體在遊戲開發的實際操作,這些太菜了有木有。參數太多,並不需要一一賦值,等有了一兩個小項目之後,就可以直接粘貼複製。。


int WINAPI WinMain(HINSTANCE hinstance,
	HINSTANCE hprevinstance,
	LPSTR lpcmdline,
	int ncmdshow)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章