VC++_Win32_API_編程簡(jiǎn).ppt_第1頁(yè)
VC++_Win32_API_編程簡(jiǎn).ppt_第2頁(yè)
VC++_Win32_API_編程簡(jiǎn).ppt_第3頁(yè)
VC++_Win32_API_編程簡(jiǎn).ppt_第4頁(yè)
VC++_Win32_API_編程簡(jiǎn).ppt_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、win32 API游戲開(kāi)發(fā),1.1 Windows API編程基礎(chǔ),Windows編程主要有兩種方法:傳統(tǒng)的編寫(xiě)方法:使用API函數(shù)。交互式方法:使用MFC類庫(kù)。為了使程序員能夠用視窗風(fēng)格編寫(xiě)應(yīng)用程序,視窗提供了一個(gè)應(yīng)用程序編程接口,它是視窗系統(tǒng)和視窗應(yīng)用程序之間的標(biāo)準(zhǔn)程序接口。成千上萬(wàn)的應(yīng)用編程接口函數(shù)包含各種窗口類和系統(tǒng)資源。API可以為應(yīng)用程序提供windows系統(tǒng)的特殊功能和數(shù)據(jù)結(jié)構(gòu)。Windows應(yīng)用程序可以使用大量的應(yīng)用編程接口函數(shù)來(lái)調(diào)用系統(tǒng)函數(shù)。MFC,MFC,微軟基礎(chǔ)類庫(kù),微軟基礎(chǔ)類庫(kù),大約有200個(gè)類。MFC封裝了大多數(shù)應(yīng)用編程接口函數(shù),并提供了一個(gè)應(yīng)用程序框架,簡(jiǎn)化和標(biāo)準(zhǔn)化

2、了windows編程。然而,視窗應(yīng)用編程接口編程方法一直是視窗編程的基礎(chǔ)。1.2窗口,要編寫(xiě)一個(gè)窗口應(yīng)用程序,首先要?jiǎng)?chuàng)建一個(gè)或多個(gè)窗口,然后應(yīng)用程序的運(yùn)行過(guò)程就是在窗口內(nèi)、窗口之間以及窗口與系統(tǒng)之間進(jìn)行數(shù)據(jù)處理和數(shù)據(jù)交換的過(guò)程。1.3事件驅(qū)動(dòng),窗口編程是針對(duì)事件或消息的,其執(zhí)行順序取決于事件的順序。在視窗環(huán)境下,應(yīng)用程序啟動(dòng)后,系統(tǒng)等待用戶在圖形用戶界面中的輸入和選擇,如鼠標(biāo)按鈕、鍵盤(pán)按鈕、窗口創(chuàng)建、關(guān)閉、改變大小、移動(dòng)等。對(duì)于系統(tǒng)來(lái)說(shuō),這些都是事件,將生成相應(yīng)的窗口消息。事件驅(qū)動(dòng)編程方法對(duì)于編寫(xiě)交互式程序非常有用,避免了僵化的操作模式。句柄,顧名思義,是指windows對(duì)象的句柄。窗口中的句

3、柄都是32位指針變量,用來(lái)指向窗口對(duì)象占用的內(nèi)存區(qū)域。句柄的使用極大地方便了窗口管理其內(nèi)存中的各種窗口對(duì)象。1.5消息,消息是描述事件發(fā)生的信息。Windows應(yīng)用程序通過(guò)消息交換信息。在窗口中,消息由消息結(jié)構(gòu)表示,其結(jié)構(gòu)如下:Typedef結(jié)構(gòu)標(biāo)記消息HWND;/窗口句柄UNIT消息;/消息編號(hào)。WPARAM wParam/用于提供消息的附加消息。LPARAM lParam/用于提供消息的附加消息。DWORD時(shí)間;/指定消息發(fā)送到隊(duì)列的時(shí)間點(diǎn)pt;/發(fā)送消息時(shí)指定屏幕光標(biāo)的位置消息;VC中有幾個(gè)系統(tǒng)定義的消息分類,不同的前綴符號(hào)經(jīng)常被用來(lái)標(biāo)識(shí)消息分類,如下表所示:1.6 Windows應(yīng)用程

4、序的常見(jiàn)消息,1。鼠標(biāo)消息,主要是產(chǎn)生點(diǎn)擊鼠標(biāo)左鍵的消息。釋放鼠標(biāo)左鍵時(shí)生成的消息。2.鍵盤(pán)信息主要包括按下系統(tǒng)鍵時(shí)產(chǎn)生的信息。釋放系統(tǒng)密鑰時(shí)生成的消息。3.窗口消息主要包括:創(chuàng)建WM_CREATE:窗口時(shí)由CreateWindows函數(shù)發(fā)送的消息。窗口關(guān)閉時(shí)生成的消息。當(dāng)應(yīng)用程序退出時(shí),PostQuitMessage函數(shù)會(huì)發(fā)出一條消息。2.1典型的窗口程序結(jié)構(gòu),窗口應(yīng)用程序的主體由以下兩個(gè)功能完成:WinMain()功能負(fù)責(zé)建立窗口和消息循環(huán)。WinProc()函數(shù)負(fù)責(zé)消息處理。2.1典型的窗口程序結(jié)構(gòu),2.2入口WinMain(),WinMain(),類似于c語(yǔ)言中的Main函數(shù),是Win

5、32應(yīng)用程序的入口函數(shù)。WinMain()函數(shù)主要用于創(chuàng)建主窗口以及生成和處理消息循環(huán)。WinMain()函數(shù),因?yàn)榇翱谑且粋€(gè)多任務(wù)系統(tǒng),同一應(yīng)用程序的多個(gè)窗口可能同時(shí)存在。windows系統(tǒng)對(duì)每個(gè)窗口的執(zhí)行稱為實(shí)例,它由一個(gè)實(shí)例句柄唯一標(biāo)識(shí)。WinMain()函數(shù)與DOS程序的Main()函數(shù)具有相同的功能,但不同之處在于WinMain()函數(shù)必須有四個(gè)參數(shù),這些參數(shù)是由系統(tǒng)傳遞給它的。WinMain()函數(shù)的原型如下:int Pascal WinMain(HinstanchhInstance,/當(dāng)前實(shí)例句柄hinstanchrevinstance,/上一個(gè)實(shí)例句柄LPSTR lpCmdLi

6、ne,/命令行字符int nCmdShow) /窗口顯示模式,WinMain()函數(shù)的第一個(gè)參數(shù)hInstance,是標(biāo)識(shí)應(yīng)用程序當(dāng)前實(shí)例的句柄。第二個(gè)參數(shù)是hPrevInstance,它是用于標(biāo)識(shí)應(yīng)用程序的前一個(gè)實(shí)例的句柄。第三個(gè)參數(shù)是lpCmdLine,它是指向應(yīng)用程序命令行參數(shù)字符串的指針。最后一個(gè)參數(shù)是nCmdShow,它是一個(gè)用于指定窗口顯示模式的整數(shù)。整數(shù)值可以是軟件顯示、軟件隱藏、軟件顯示最大化、軟件顯示最小化等。WinMain()函數(shù)主要由兩部分組成:窗口初始化消息循環(huán),包括以下主要步驟:定義窗口類:通過(guò)給窗口類的數(shù)據(jù)結(jié)構(gòu)WINDCLASS賦值來(lái)設(shè)置窗口類的各種屬性。例如窗口邊

7、框、窗口標(biāo)題欄文本、窗口大小和位置、鼠標(biāo)、背景顏色等。注冊(cè)窗口類:贏。系統(tǒng)本身提供了一些預(yù)定義的窗口類。程序員也可以定制窗口類。使用前必須注冊(cè)窗口類。窗口類的注冊(cè)是通過(guò)注冊(cè)類()函數(shù)實(shí)現(xiàn)的。創(chuàng)建窗口實(shí)例:創(chuàng)建窗口類的實(shí)例是通過(guò)創(chuàng)建窗口()函數(shù)實(shí)現(xiàn)的。窗口顯示:窗口類顯示由ShowWindows()函數(shù)和UpdateWindows()函數(shù)實(shí)現(xiàn)。函數(shù):應(yīng)用程序通過(guò)調(diào)用函數(shù)在屏幕上顯示一個(gè)窗口。函數(shù):窗口顯示后,應(yīng)用程序調(diào)用更新窗口來(lái)更新和繪制用戶區(qū)域,并發(fā)出WM_PAINT消息。消息循環(huán),窗口為每個(gè)當(dāng)前執(zhí)行的窗口程序維護(hù)一個(gè)消息隊(duì)列。輸入事件發(fā)生后,窗口將事件轉(zhuǎn)換為消息,并將消息放入程序的消息隊(duì)列

8、。該程序通過(guò)執(zhí)行稱為消息循環(huán)的程序代碼從消息隊(duì)列中獲取消息。下面是WinMain()函數(shù)中消息循環(huán)的代碼:/消息循環(huán)從調(diào)用getmessage()開(kāi)始,GetMessage()從消息隊(duì)列中取出/一條消息,同時(shí)(GetMessage()函數(shù)的一般結(jié)構(gòu),int PASCAL WinMain() /定義窗口類:WNDCLASS wndclass樣式=CS _ HRESULT | CS _ VRESULT;十個(gè)字段wndclass.lpszclass name= lei/注冊(cè)窗口類:RegisterClass(,2.3窗口函數(shù)WndProc(),它是窗口應(yīng)用程序的消息處理程序。窗口函數(shù)WndProc(

9、)定義了應(yīng)用程序?qū)κ盏降牟煌⒌捻憫?yīng),包括對(duì)可能收到的各種消息的處理。WndProc函數(shù)由一個(gè)或多個(gè)開(kāi)關(guān)語(yǔ)句組成。每個(gè)案例語(yǔ)句對(duì)應(yīng)一條消息。當(dāng)應(yīng)用程序收到消息時(shí),相應(yīng)的案例語(yǔ)句被激活,相應(yīng)的響應(yīng)程序模塊被執(zhí)行。所有未被窗口消息處理程序處理的消息都被傳遞給名為DefWindowProc的窗口函數(shù)進(jìn)行默認(rèn)處理。消息處理函數(shù)wndproc的一般結(jié)構(gòu),lresult回調(diào)WndProc的定義(hwnd h mainwnd,uint message,wparam wparam,lparam lparam)/窗口函數(shù)開(kāi)關(guān)(message)case WM _ key down :/擊鍵消息;打破;案例:打破

10、;關(guān)閉應(yīng)用程序窗口時(shí)出現(xiàn)案例WM_DESTROY:/退出消息(0);/發(fā)送WM_QUIT消息,結(jié)束應(yīng)用程序返回0;默認(rèn):中斷;/調(diào)用默認(rèn)的消息處理過(guò)程returndef windowproc (hmainwnd,message,wparam,lparam);2.4窗口應(yīng)用程序的常見(jiàn)數(shù)據(jù)類型。所有的視窗應(yīng)用程序都有一個(gè)程序初始化的過(guò)程。下面以實(shí)現(xiàn)最簡(jiǎn)單功能的WinApiDemo程序?yàn)槔?,說(shuō)明了Windows程序的基本框架。操作步驟如下:(1)打開(kāi)Visual C 6.0。從“文件”菜單中選擇“新建”,并在出現(xiàn)的對(duì)話框中選擇“項(xiàng)目”列(新項(xiàng)目),然后單擊其下的Win32應(yīng)用程序項(xiàng),這意味著使用Wi

11、n32環(huán)境創(chuàng)建應(yīng)用程序。(2)在Locatin中填寫(xiě)項(xiàng)目路徑,然后在Project Name中填寫(xiě)“WinApiDemo”,根據(jù)默認(rèn)設(shè)置點(diǎn)擊“確定”。(3)從“文件”菜單中選擇“新建”,并在出現(xiàn)的對(duì)話框中選擇“文件”列(新文件),然后單擊其下的“C源文件”項(xiàng)目,這意味著創(chuàng)建一個(gè)新的C源文件。在右側(cè)的“文件”欄中輸入“WinApiDemo”,最后選中“添加到項(xiàng)目”復(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)建窗口實(shí)例的窗口結(jié)構(gòu)名稱;/窗口標(biāo)題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ù);/當(dāng)前應(yīng)用程序?qū)嵗浔鷚inclass.hicon=loadicon (null,idi _ application);/窗口圖標(biāo)winclass.h cursor=loadcursor(空,IDC _ arrow);/窗口光標(biāo)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)建一個(gè)窗口。(/注冊(cè)窗口。WinApiDemo.cpp源代碼(2)。/接下來(lái),使用createwindow()函數(shù)創(chuàng)建一個(gè)窗口。并返回已建立窗口的句柄hmain wnd=create window(szclassname,/窗口結(jié)構(gòu)的名稱szAppTitle,/窗口的標(biāo)題WS _ OVERLAPPEDWINDOW,/窗口樣式是重疊窗口,/

15、下面四個(gè)參數(shù)代表窗口左上角的x和y坐標(biāo)以及窗口的寬度和高度。使/使用默認(rèn)值CW _ usedefault,CW _ usedefault,CW _ usedefault,CW _ usedefault,/以下參數(shù)為父窗口句柄、窗口菜單句柄、應(yīng)用程序?qū)嵗浔?以及附加參數(shù)空、空、高、空);顯示窗口(顯示窗口,顯示正常);/顯示最大化窗口更新窗口(HMainWnd);/更新窗口/使用While()循環(huán)建立一個(gè)消息循環(huán)while (getmessage(,winapidemo.cpp源代碼(3),lresult回調(diào)wndproc (hwnd h mainwnd,uint message,wparam wparam,LPARAM lParam) /定義窗口功能開(kāi)關(guān)(message)case WM _ key down :/擊鍵消息消息框(h mainwnd,按鍵被按下!鍵盤(pán),兆字節(jié)_正常);打破;案例WM _ RBBUTTON down :/鼠標(biāo)信息消息框(hMainwnd,鼠標(biāo)右鍵已按下!鼠標(biāo),宏塊_確定);打破;case WM _ LBBUTTON down :/鼠標(biāo)信息消息框(hMainwnd,按下鼠標(biāo)左鍵!鼠標(biāo),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論