第一課Windows編程基礎(chǔ)知識_第1頁
第一課Windows編程基礎(chǔ)知識_第2頁
第一課Windows編程基礎(chǔ)知識_第3頁
第一課Windows編程基礎(chǔ)知識_第4頁
第一課Windows編程基礎(chǔ)知識_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Windows編程

基礎(chǔ)知識主要內(nèi)容Windows編程特點(diǎn)、特性動態(tài)鏈接庫和靜態(tài)鏈接庫Windows的基本數(shù)據(jù)類型窗口和句柄過程驅(qū)動和消息驅(qū)動簡單Windows應(yīng)用程序演示2創(chuàng)建Win32項(xiàng)目3編譯運(yùn)行,生成窗口4在這個窗口上,我們可以用鼠標(biāo)、鍵盤跟應(yīng)用程序交互。例如,用鼠標(biāo)、鍵盤操作菜單;用鼠標(biāo)拖動窗口等等。經(jīng)過后面的學(xué)習(xí),我們就可以添加更多的功能到應(yīng)用程序,例如用鍵盤、鼠標(biāo)控制精靈在窗口中移動,碰到怪物后展開戰(zhàn)斗等等。5Windows編程特點(diǎn)、特性動態(tài)鏈接庫和靜態(tài)鏈接庫Windows的基本數(shù)據(jù)類型窗口和句柄過程驅(qū)動和消息驅(qū)動6圖形用戶接口(GUI

GraphicalUserInterface) Windows為應(yīng)用程序提供了窗口、菜單等等,這些圖形提供了使用屏幕的最佳方式。多任務(wù)環(huán)境

為便于多個程序的使用,以及這些程序間信息的交換,Windows支持多任務(wù)。在同一時刻能有多個Windows程序顯示并運(yùn)行。動態(tài)鏈接庫 Windows上執(zhí)行的程序可共享動態(tài)鏈接庫中的內(nèi)容。Windows運(yùn)行機(jī)制的核心就是“動態(tài)鏈接”。7

一個完整的Windows應(yīng)用程序除了WinMain函數(shù)外,包含用于處理用戶動作和窗口消息的窗口函數(shù)。

一個Windows應(yīng)用程序還常常具有一些特性:

消息驅(qū)動機(jī)制

圖形設(shè)備接口(GDIGraphicsDeviceInterface)

基于資源的程序設(shè)計(jì)

動態(tài)鏈接庫81.消息驅(qū)動機(jī)制

Windows程序和控制臺應(yīng)用程序之間一個最根本區(qū)別,在于控制臺應(yīng)用程序是通過調(diào)用系統(tǒng)函數(shù)來獲得用戶輸入,而Windows程序則是通過系統(tǒng)發(fā)送的消息來處理用戶輸入。 Windows操作環(huán)境中,無論是系統(tǒng)產(chǎn)生的動作或用戶運(yùn)行應(yīng)用程序產(chǎn)生的動作,稱為事件(Events)產(chǎn)生的消息(Message)。9

2.圖形設(shè)備接口(GDI)

Windows則提供了一個抽象的接口,稱為圖形設(shè)備接口,使得程序員直接利用系統(tǒng)的GDI函數(shù)就能方便實(shí)現(xiàn)圖形和文本的輸出?;谫Y源的程序設(shè)計(jì)

Windows應(yīng)用程序包含眾多圖形元素,如光標(biāo)、菜單、工具欄、位圖、對話框等。104.動態(tài)鏈接庫在Windows操作系統(tǒng)中,最主要的DLL有KERNEL32.DLL、GDI32.DLL和USER32.DLL。KERNEL32.DLL用來處理存儲器低層功能、任務(wù)和資源管理等Windows核心服務(wù);GDI32.DLL提供圖形設(shè)備接口,管理用戶界面和圖形繪制,包括Windows元文件、位圖、設(shè)備描述表和字體等;USER32.DLL負(fù)責(zé)窗口的管理,包括消息、菜單、光標(biāo)、計(jì)時器及其它與控制窗口顯示相關(guān)的功能。11Windows編程特點(diǎn)、特性動態(tài)鏈接庫和靜態(tài)鏈接庫Windows的基本數(shù)據(jù)類型窗口和句柄過程驅(qū)動和消息驅(qū)動12靜態(tài)鏈接庫技術(shù)DOS環(huán)境下的C語言是依賴其運(yùn)算函數(shù)庫運(yùn)行的。如程序中用到了庫函數(shù)printf,鏈接程序?qū)倪\(yùn)算函數(shù)庫中拷入printf函數(shù)到程序內(nèi)存中來,形成可執(zhí)行文件。這種方法叫靜態(tài)鏈接。程序員還可以建立自己的函數(shù)庫,在其中實(shí)現(xiàn)常用的功能或標(biāo)準(zhǔn)庫里沒有的函數(shù)。這很大程度上解放了程序員,使其不必反復(fù)編碼重復(fù)工作。消除了重復(fù)編碼的現(xiàn)象。靜態(tài)鏈接庫也帶來了問題。多個程序在Windows環(huán)境下共享內(nèi)存,每個程序都保存一個公用函數(shù)副本,這顯然導(dǎo)致了內(nèi)存的浪費(fèi)。13動態(tài)鏈接庫技術(shù)動態(tài)鏈接庫(DLL)技術(shù)是Windows的重要技術(shù)。鏈接程序并不把庫函數(shù)拷入程序的可執(zhí)行文件,而是由程序的可執(zhí)行文件在執(zhí)行過程中調(diào)用庫函數(shù)。這種方法節(jié)約了內(nèi)存,無論多少并行程序,要用到某個函數(shù)時,該函數(shù)在內(nèi)存中只有一個拷貝。此外,當(dāng)函數(shù)被修改后,不必重新鏈接調(diào)用該函數(shù)的可執(zhí)行文件。這樣就解決了靜態(tài)鏈接庫使用中浪費(fèi)內(nèi)存的問題,修改后也不需要重新鏈接,使用方便有效。14動態(tài)鏈接庫技術(shù)DLL的實(shí)質(zhì)是一個可執(zhí)行模塊,它可以包括Windows應(yīng)用程序所有的函數(shù),以及資源和其他代碼。但DLL本身不會自己運(yùn)行,它將駐留內(nèi)存而其他應(yīng)用程序來調(diào)用它。在VC++中我們可以編寫自己的動態(tài)鏈接庫。我們在Windows目錄下的system文件夾中會看到大量的鏈接庫(*.DLL)。15Windows編程特點(diǎn)、特性動態(tài)鏈接庫和靜態(tài)鏈接庫Windows的基本數(shù)據(jù)類型窗口和句柄過程驅(qū)動和消息驅(qū)動進(jìn)程和線程16Windows常用的基本數(shù)據(jù)類型Windows數(shù)據(jù)類型所對應(yīng)的基本數(shù)據(jù)類型說明BOOLbool布爾值BYTEunsignedchar8位無符號整數(shù)COLORREFunsignedlong用作顏色值的32位值DWORDunsignedlong32位無符號整數(shù),段地址和相關(guān)的偏移地址LONGlong32位帶符號整數(shù)LPARAMlong作為參數(shù)傳遞給窗口過程或回調(diào)函數(shù)的32位值LPCSTRconstchar*指向字符串常量的32位指針LPSTRchar*指向字符串的32位指針LPVOIDvoid*指向未定義類型的32位指針LRESULTlong來自窗口過程或回調(diào)函數(shù)的32位返回值UINTunsignedint32位無符號整數(shù)WORDunsignedshort16位無符號整數(shù)WPARAMunsignedint當(dāng)作參數(shù)傳遞給窗口過程或回調(diào)函數(shù)的32位值17HINSTANCE和LPSTR等,這樣的數(shù)據(jù)類型只是一些基本數(shù)據(jù)類型的別名。需要說明的是:這些基本數(shù)據(jù)類型都是用大寫字符來表示,以與一般C++基本數(shù)據(jù)類型相區(qū)別。凡是數(shù)據(jù)類型的前綴是P或LP,則表示該類型是一個指針或長指針數(shù)據(jù)類型。若前綴是U,則表示無符號數(shù)據(jù)類型,等等。

Windows還提供一些宏來處理上述基本數(shù)據(jù)類型。例如,LOBYTE和HIBYTE分別用來獲取16位數(shù)值中的低位和高位字節(jié);LOWORD和HIWORD分別用來獲取32位數(shù)值中的低位字和高位字;MAKEWORD是將兩個16位無符號值結(jié)合成一個32位無符號值,等等。18Windows編程特點(diǎn)、特性動態(tài)鏈接庫和靜態(tài)鏈接庫Windows的基本數(shù)據(jù)類型窗口和句柄過程驅(qū)動和消息驅(qū)動進(jìn)程和線程19窗口Windows應(yīng)用程序基本的操作單元;應(yīng)用程序與用戶之間交互的接口;是系統(tǒng)管理應(yīng)用程序的基本單位。Windows應(yīng)用程序首先創(chuàng)建一個或多個窗口;程序運(yùn)行過程就是某個窗口內(nèi)部、多個窗口之間、窗口與系統(tǒng)之間的交互過程。20句柄句柄(HANDLE)是一個4字節(jié)長的、無符號的惟一整數(shù)值(long型),用于標(biāo)識應(yīng)用程序中的各種對象、資源。例如窗口、光標(biāo)、應(yīng)用程序?qū)嵗鹊?。系統(tǒng)就是通過句柄來找到相應(yīng)的對象、資源,從而來進(jìn)行管理和操作的。按資源的類型,又可將句柄細(xì)分成圖標(biāo)句柄(HICON),光標(biāo)句柄(HCURSOR),窗口句柄(HWND),應(yīng)用程序?qū)嵗浔℉INSTANCE)等等各種類型的句柄。例如,操作系統(tǒng)給每一個窗口指定了一個唯一的標(biāo)識號即窗口句柄。21Windows編程特點(diǎn)、特性動態(tài)鏈接庫和靜態(tài)鏈接庫Windows的基本數(shù)據(jù)類型窗口和句柄過程驅(qū)動和消息驅(qū)動進(jìn)程和線程22過程驅(qū)動DOS下開發(fā)程序主要使用順序的、過程驅(qū)動的程序設(shè)計(jì)方法。其特點(diǎn)是程序有明顯的開始、明顯的執(zhí)行過程、明顯的的結(jié)束。執(zhí)行過程中,程序直接控制事件或過程的順序。這樣的程序設(shè)計(jì)方法是面向過程而不是面向用戶的,交互性差,用戶界面不夠友好,它強(qiáng)迫用戶按照某種不可更改的模式進(jìn)行工作?!绦蚰K一程序模塊N…開始結(jié)束23事件驅(qū)動Windows程序是事件驅(qū)動的,由事件的發(fā)生來控制程序走向。是一種“被動”式程序設(shè)計(jì)方法,程序開始運(yùn)行時,處于等待用戶輸入事件狀態(tài),然后取得事件并作出相應(yīng)反應(yīng),處理完畢又返回并處于等待事件狀態(tài)。處理程序一處理程序二開始結(jié)束處理程序三事件一事件二事件三退出事件……24事件驅(qū)動和消息循環(huán)事件驅(qū)動程序設(shè)計(jì)是圍繞消息的產(chǎn)生、處理而展開的,消息是關(guān)于發(fā)生的事件的信息。例如:一個鍵或鼠標(biāo)被按下,產(chǎn)生了一個消息;當(dāng)松開時,又產(chǎn)生了另一個消息。Windows應(yīng)用程序所做的主要工作就是對這些消息進(jìn)行處理。消息可由應(yīng)用程序本身產(chǎn)生,也可以由運(yùn)行的其他程序產(chǎn)生,還可以由用戶或Windows產(chǎn)生。每當(dāng)事件發(fā)生時,Windows根據(jù)傳來的消息做出記錄并將相應(yīng)的消息分配到有關(guān)的應(yīng)用程序。25事件驅(qū)動和消息循環(huán)Windows為應(yīng)用程序消息提供了稱為消息隊(duì)列(MessageQueue)的保留區(qū)。操作系統(tǒng)中的每個正在執(zhí)行的程序(應(yīng)用程序、系統(tǒng))都有自己的消息隊(duì)列。由操作系統(tǒng)、其他應(yīng)用程序或用戶向應(yīng)用程序發(fā)送的消息都存儲在隊(duì)列中,各消息在隊(duì)中等待被調(diào)用。Windows應(yīng)用程序以特定的循環(huán)調(diào)用Windows消息,即消息循環(huán)(MessageLoop)。消息循環(huán)是一個簡單的While()循環(huán),它一直運(yùn)行,直到接收到終止執(zhí)行的消息才會關(guān)閉應(yīng)用程序,停止循環(huán)。26Windows應(yīng)用程序的基本流程27WindowsAPI和MFCApplicationProgrammingInterface應(yīng)用程序接口。學(xué)習(xí)WindowsAPI將使您更深入地了解Windows工作的方式。

使用C++語言和WINOWSAPI不是編寫Windows程序的唯一方法。然而,這種方法卻提供給您最佳的性能、最強(qiáng)大的功能和在發(fā)掘Windows特性方面最大的靈活性。MicrosoftFoundationClassLibrary(MFC)在一組C++類別中封裝了許多Windows程序設(shè)計(jì)中的瑣碎細(xì)節(jié)。28簡單的Windows應(yīng)用程序【例HelloWord】:一個最簡單的Windows應(yīng)用程序(1)運(yùn)行MicrosoftVisual2008后,選擇“文件”“新建”菜單命令,打開應(yīng)用程序向?qū)?,顯示出“新建項(xiàng)目”對話框。29(2)在工程名稱框中鍵入Win32應(yīng)用程序項(xiàng)目名稱HelloMsg,單擊[確定]按鈕繼續(xù)。(3)在“下一步”向?qū)е泄催x“空項(xiàng)目”,完成。30(5)在文檔編輯窗口中輸入下面的代碼:#include<windows.h>intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){MessageBox(NULL,TEXT("你好,我的VisualC++世界!"),TEXT("問候"),0);return0;

}31編譯并運(yùn)行程序從上面的程序可以看出,WinMain函數(shù)的原型如下:intWINAPIWinMain(HINSTANCEhInstance, //當(dāng)前實(shí)例句柄HINSTANCEhPrevInstance,

//

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論