windows 程序解析
?
























































































































































一? include頭文件和宏定義




二 winmain()函數
int?WINAPI?WinMain(????HINSTANCE?hinstance,



函數原型如上,其中hinstance是windows為應用程序生成的句柄,hprevinstance參數現在一般不用,用來向以前的兼容,lpcmdline就相當于dos程序的命令行參數,ncmdshow枚舉類型指出如何打開主應用程序窗口,比如最大化,最小化,最前端等
WINAPI 不能少,相當于以前的pascal 關鍵字
三 WNDCLASSEX 結構
????? WNDCLASSEX?winclass;?//?this?will?hold?the?class?we?create

















四 注冊windows類
RegisterClassEx(&winclass); 傳入指向類的指針
五 創建窗口
CreateWindowEx(NULL,??????????????????//?extended?style?????? 擴張的窗口樣式,高級,一般不用









六 顯示窗口且刷新一下
ShowWindow()//可以控制不顯示,或在狀態蘭也不顯示
UpdateWindow() //刷新窗口,就是生成一個WM_PAINT消息
七 主消息循環
LRESULT?CALLBACK?WindowProc(HWND?hwnd,? //窗口句柄



LRESULT?CALLBACK 不能少,以下是簡單的幾種消息:
WM_CREATE: //可以此時執行各種初始化
WM_PAINT:??? ?hdc? =?BeginPaint(hwnd,&ps);?????//確認窗口是否有效


WM_KEYDOWN:? //處理鍵盤按下
WM_DESTROY:???? //將要關閉應用程序,發出WM_QUIT消息
WM_QUIT:??????????? //推出程序
注意 函數DefWindowProc(),是處理其他的消息,除了WindowProc()已經處理的其他消息.
GetMessage(LPMSG,?????? //消息結構的地址
??????????????????? hWnd,??????????????? //窗口的句柄
?????????????????????uint,????????????????? //first message
?????????????????????? uint)?????????????????? //last messge
她從事件隊列獲得下一個消息,然后調用TranslateMessage()函數,進行消息的轉換和處理,然后通過DispatchMessage()來調用winproc()函數.
PeekMessage( &msg,NULL,0,0,PM_REMOVE))中參數:消息結構的指針,窗口的句柄,第一條消息,最后一條消息,刪除標記 ,其中參數刪除標記是GetMessage()中沒有的,該標記有2個值,PM_NOREMOVE和PM_REMOVE,前一個經過peekmessage()后不將其從消息隊列中刪除,后一個表示經過peekmessage()后從消息隊列中刪除.