




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、win32 API游戲開發(fā),1.1 Windows API編程基礎(chǔ),Windows編程主要有兩種方法:傳統(tǒng)的編寫方法:使用API函數(shù)。交互式方法:使用MFC類庫。為了使程序員能夠用視窗風格編寫應(yīng)用程序,視窗提供了一個應(yīng)用程序編程接口,它是視窗系統(tǒng)和視窗應(yīng)用程序之間的標準程序接口。成千上萬的應(yīng)用編程接口函數(shù)包含各種窗口類和系統(tǒng)資源。API可以為應(yīng)用程序提供windows系統(tǒng)的特殊功能和數(shù)據(jù)結(jié)構(gòu)。Windows應(yīng)用程序可以使用大量的應(yīng)用編程接口函數(shù)來調(diào)用系統(tǒng)函數(shù)。MFC,MFC,微軟基礎(chǔ)類庫,微軟基礎(chǔ)類庫,大約有200個類。MFC封裝了大多數(shù)應(yīng)用編程接口函數(shù),并提供了一個應(yīng)用程序框架,簡化和標準化
2、了windows編程。然而,視窗應(yīng)用編程接口編程方法一直是視窗編程的基礎(chǔ)。1.2窗口,要編寫一個窗口應(yīng)用程序,首先要創(chuàng)建一個或多個窗口,然后應(yīng)用程序的運行過程就是在窗口內(nèi)、窗口之間以及窗口與系統(tǒng)之間進行數(shù)據(jù)處理和數(shù)據(jù)交換的過程。1.3事件驅(qū)動,窗口編程是針對事件或消息的,其執(zhí)行順序取決于事件的順序。在視窗環(huán)境下,應(yīng)用程序啟動后,系統(tǒng)等待用戶在圖形用戶界面中的輸入和選擇,如鼠標按鈕、鍵盤按鈕、窗口創(chuàng)建、關(guān)閉、改變大小、移動等。對于系統(tǒng)來說,這些都是事件,將生成相應(yīng)的窗口消息。事件驅(qū)動編程方法對于編寫交互式程序非常有用,避免了僵化的操作模式。句柄,顧名思義,是指windows對象的句柄。窗口中的句
3、柄都是32位指針變量,用來指向窗口對象占用的內(nèi)存區(qū)域。句柄的使用極大地方便了窗口管理其內(nèi)存中的各種窗口對象。1.5消息,消息是描述事件發(fā)生的信息。Windows應(yīng)用程序通過消息交換信息。在窗口中,消息由消息結(jié)構(gòu)表示,其結(jié)構(gòu)如下:Typedef結(jié)構(gòu)標記消息HWND;/窗口句柄UNIT消息;/消息編號。WPARAM wParam/用于提供消息的附加消息。LPARAM lParam/用于提供消息的附加消息。DWORD時間;/指定消息發(fā)送到隊列的時間點pt;/發(fā)送消息時指定屏幕光標的位置消息;VC中有幾個系統(tǒng)定義的消息分類,不同的前綴符號經(jīng)常被用來標識消息分類,如下表所示:1.6 Windows應(yīng)用程
4、序的常見消息,1。鼠標消息,主要是產(chǎn)生點擊鼠標左鍵的消息。釋放鼠標左鍵時生成的消息。2.鍵盤信息主要包括按下系統(tǒng)鍵時產(chǎn)生的信息。釋放系統(tǒng)密鑰時生成的消息。3.窗口消息主要包括:創(chuàng)建WM_CREATE:窗口時由CreateWindows函數(shù)發(fā)送的消息。窗口關(guān)閉時生成的消息。當應(yīng)用程序退出時,PostQuitMessage函數(shù)會發(fā)出一條消息。2.1典型的窗口程序結(jié)構(gòu),窗口應(yīng)用程序的主體由以下兩個功能完成:WinMain()功能負責建立窗口和消息循環(huán)。WinProc()函數(shù)負責消息處理。2.1典型的窗口程序結(jié)構(gòu),2.2入口WinMain(),WinMain(),類似于c語言中的Main函數(shù),是Win
5、32應(yīng)用程序的入口函數(shù)。WinMain()函數(shù)主要用于創(chuàng)建主窗口以及生成和處理消息循環(huán)。WinMain()函數(shù),因為窗口是一個多任務(wù)系統(tǒng),同一應(yīng)用程序的多個窗口可能同時存在。windows系統(tǒng)對每個窗口的執(zhí)行稱為實例,它由一個實例句柄唯一標識。WinMain()函數(shù)與DOS程序的Main()函數(shù)具有相同的功能,但不同之處在于WinMain()函數(shù)必須有四個參數(shù),這些參數(shù)是由系統(tǒng)傳遞給它的。WinMain()函數(shù)的原型如下:int Pascal WinMain(HinstanchhInstance,/當前實例句柄hinstanchrevinstance,/上一個實例句柄LPSTR lpCmdLi
6、ne,/命令行字符int nCmdShow) /窗口顯示模式,WinMain()函數(shù)的第一個參數(shù)hInstance,是標識應(yīng)用程序當前實例的句柄。第二個參數(shù)是hPrevInstance,它是用于標識應(yīng)用程序的前一個實例的句柄。第三個參數(shù)是lpCmdLine,它是指向應(yīng)用程序命令行參數(shù)字符串的指針。最后一個參數(shù)是nCmdShow,它是一個用于指定窗口顯示模式的整數(shù)。整數(shù)值可以是軟件顯示、軟件隱藏、軟件顯示最大化、軟件顯示最小化等。WinMain()函數(shù)主要由兩部分組成:窗口初始化消息循環(huán),包括以下主要步驟:定義窗口類:通過給窗口類的數(shù)據(jù)結(jié)構(gòu)WINDCLASS賦值來設(shè)置窗口類的各種屬性。例如窗口邊
7、框、窗口標題欄文本、窗口大小和位置、鼠標、背景顏色等。注冊窗口類:贏。系統(tǒng)本身提供了一些預(yù)定義的窗口類。程序員也可以定制窗口類。使用前必須注冊窗口類。窗口類的注冊是通過注冊類()函數(shù)實現(xiàn)的。創(chuàng)建窗口實例:創(chuàng)建窗口類的實例是通過創(chuàng)建窗口()函數(shù)實現(xiàn)的。窗口顯示:窗口類顯示由ShowWindows()函數(shù)和UpdateWindows()函數(shù)實現(xiàn)。函數(shù):應(yīng)用程序通過調(diào)用函數(shù)在屏幕上顯示一個窗口。函數(shù):窗口顯示后,應(yīng)用程序調(diào)用更新窗口來更新和繪制用戶區(qū)域,并發(fā)出WM_PAINT消息。消息循環(huán),窗口為每個當前執(zhí)行的窗口程序維護一個消息隊列。輸入事件發(fā)生后,窗口將事件轉(zhuǎn)換為消息,并將消息放入程序的消息隊列
8、。該程序通過執(zhí)行稱為消息循環(huán)的程序代碼從消息隊列中獲取消息。下面是WinMain()函數(shù)中消息循環(huán)的代碼:/消息循環(huán)從調(diào)用getmessage()開始,GetMessage()從消息隊列中取出/一條消息,同時(GetMessage()函數(shù)的一般結(jié)構(gòu),int PASCAL WinMain() /定義窗口類:WNDCLASS wndclass樣式=CS _ HRESULT | CS _ VRESULT;十個字段wndclass.lpszclass name= lei/注冊窗口類:RegisterClass(,2.3窗口函數(shù)WndProc(),它是窗口應(yīng)用程序的消息處理程序。窗口函數(shù)WndProc(
9、)定義了應(yīng)用程序?qū)κ盏降牟煌⒌捻憫?yīng),包括對可能收到的各種消息的處理。WndProc函數(shù)由一個或多個開關(guān)語句組成。每個案例語句對應(yīng)一條消息。當應(yīng)用程序收到消息時,相應(yīng)的案例語句被激活,相應(yīng)的響應(yīng)程序模塊被執(zhí)行。所有未被窗口消息處理程序處理的消息都被傳遞給名為DefWindowProc的窗口函數(shù)進行默認處理。消息處理函數(shù)wndproc的一般結(jié)構(gòu),lresult回調(diào)WndProc的定義(hwnd h mainwnd,uint message,wparam wparam,lparam lparam)/窗口函數(shù)開關(guān)(message)case WM _ key down :/擊鍵消息;打破;案例:打破
10、;關(guān)閉應(yīng)用程序窗口時出現(xiàn)案例WM_DESTROY:/退出消息(0);/發(fā)送WM_QUIT消息,結(jié)束應(yīng)用程序返回0;默認:中斷;/調(diào)用默認的消息處理過程returndef windowproc (hmainwnd,message,wparam,lparam);2.4窗口應(yīng)用程序的常見數(shù)據(jù)類型。所有的視窗應(yīng)用程序都有一個程序初始化的過程。下面以實現(xiàn)最簡單功能的WinApiDemo程序為例,說明了Windows程序的基本框架。操作步驟如下:(1)打開Visual C 6.0。從“文件”菜單中選擇“新建”,并在出現(xiàn)的對話框中選擇“項目”列(新項目),然后單擊其下的Win32應(yīng)用程序項,這意味著使用Wi
11、n32環(huán)境創(chuàng)建應(yīng)用程序。(2)在Locatin中填寫項目路徑,然后在Project Name中填寫“WinApiDemo”,根據(jù)默認設(shè)置點擊“確定”。(3)從“文件”菜單中選擇“新建”,并在出現(xiàn)的對話框中選擇“文件”列(新文件),然后單擊其下的“C源文件”項目,這意味著創(chuàng)建一個新的C源文件。在右側(cè)的“文件”欄中輸入“WinApiDemo”,最后選中“添加到項目”復(fù)選框,然后單擊“確定”按鈕。(4)在“WinApiDemo.cpp”文件中輸入以下程序代碼。2.5 API編程示例,WinApiDemo.cpp源代碼(1),#include /頭文件lresult回調(diào)wndproc (hwnd,ui
12、nt,wparam,lparam);/窗口函數(shù)聲明,該函數(shù)將處理發(fā)送到應(yīng)用程序窗口的各種消息char szClassName=windowclass/創(chuàng)建窗口實例的窗口結(jié)構(gòu)名稱;/窗口標題int Pascal win main(hin instance hin instance,hinstance hprevinstance,lpstr lpszcmdparam,int ncmdshow)/winmain()函數(shù)定義HWND hMainWnd/窗口句柄MSG消息;WNDCLASS winclass消息結(jié)構(gòu);/窗口結(jié)構(gòu)if(!win class . style=CS _ HREEDRAW | C
13、S _ VREEDRAW;winclass.lpfnWndProc=WndProc的窗口樣式;win class . CBclSextra=0;/附加參數(shù)win class . cbwndexa=0;/win class . HinInstance=HinInstance的附加參數(shù);/當前應(yīng)用程序?qū)嵗浔鷚inclass.hicon=loadicon (null,idi _ application);/窗口圖標winclass.h cursor=loadcursor(空,IDC _ arrow);/窗口光標winclass . hbrbackground=(HB rush)getstock o
14、bject(lt gray _ brush);/窗口的背景顏色為淺灰色winclass.lpszMenuName=空;/窗口菜單win class . lpszclassname=szclassname;/命名窗口結(jié)構(gòu)。/創(chuàng)建窗口()函數(shù)將根據(jù)窗口結(jié)構(gòu)的名稱創(chuàng)建一個窗口。(/注冊窗口。WinApiDemo.cpp源代碼(2)。/接下來,使用createwindow()函數(shù)創(chuàng)建一個窗口。并返回已建立窗口的句柄hmain wnd=create window(szclassname,/窗口結(jié)構(gòu)的名稱szAppTitle,/窗口的標題WS _ OVERLAPPEDWINDOW,/窗口樣式是重疊窗口,/
15、下面四個參數(shù)代表窗口左上角的x和y坐標以及窗口的寬度和高度。使/使用默認值CW _ usedefault,CW _ usedefault,CW _ usedefault,CW _ usedefault,/以下參數(shù)為父窗口句柄、窗口菜單句柄、應(yīng)用程序?qū)嵗浔?以及附加參數(shù)空、空、高、空);顯示窗口(顯示窗口,顯示正常);/顯示最大化窗口更新窗口(HMainWnd);/更新窗口/使用While()循環(huán)建立一個消息循環(huán)while (getmessage(,winapidemo.cpp源代碼(3),lresult回調(diào)wndproc (hwnd h mainwnd,uint message,wparam wparam,LPARAM lParam) /定義窗口功能開關(guān)(message)case WM _ key down :/擊鍵消息消息框(h mainwnd,按鍵被按下!鍵盤,兆字節(jié)_正常);打破;案例WM _ RBBUTTON down :/鼠標信息消息框(hMainwnd,鼠標右鍵已按下!鼠標,宏塊_確定);打破;case WM _ LBBUTTON down :/鼠標信息消息框(hMainwnd,按下鼠標左鍵!鼠標,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公寓租賃標準合同樣本
- 某銀行牡丹貸記卡動產(chǎn)質(zhì)押合同范本
- Module 1 Unit 2 Changes in our lives Listen and say Listen and enjoy (教學(xué)設(shè)計)-2024-2025學(xué)年滬教牛津版(深圳用)英語六年級下冊
- 沿街商鋪購房合同范本
- 藝術(shù)家合作合同模板大全
- 企業(yè)融資成立合同:出資細節(jié)
- 房屋買賣合同真實案例解析
- 企業(yè)整體出售合同范本
- 10000以內(nèi)數(shù)的讀寫(教學(xué)設(shè)計)-2023-2024學(xué)年二年級下冊數(shù)學(xué)人教版
- 11《爸爸媽媽在我心中 愛父母在行動》(教學(xué)設(shè)計)-部編版道德與法治三年級上冊
- 2025年四川司法警官職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 山東省德州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 本人報廢車輛委托書
- 雙減政策與五項管理解讀
- 2025年道德與法治小學(xué)六年級下冊教學(xué)計劃(含進度表)
- 過橋資金操作流程
- 貨物學(xué) 課件1.2貨物的特性
- 新時代中國特色社會主義理論與實踐2024版研究生教材課件全集2章
- 2024年公路水運工程施工企業(yè)主要負責人和安全生產(chǎn)管理人員安全生產(chǎn)考核試題庫(含答案)
- 2025年軍隊文職考試《公共科目》試題與參考答案
- 輔導(dǎo)員入職培訓(xùn)課件
評論
0/150
提交評論