版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(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項目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è)計
動態(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è)計
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)、計時器及其它與控制窗口顯示相關(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è)計方法。其特點(diǎn)是程序有明顯的開始、明顯的執(zhí)行過程、明顯的的結(jié)束。執(zhí)行過程中,程序直接控制事件或過程的順序。這樣的程序設(shè)計方法是面向過程而不是面向用戶的,交互性差,用戶界面不夠友好,它強(qiáng)迫用戶按照某種不可更改的模式進(jìn)行工作?!绦蚰K一程序模塊N…開始結(jié)束23事件驅(qū)動Windows程序是事件驅(qū)動的,由事件的發(fā)生來控制程序走向。是一種“被動”式程序設(shè)計方法,程序開始運(yùn)行時,處于等待用戶輸入事件狀態(tài),然后取得事件并作出相應(yīng)反應(yīng),處理完畢又返回并處于等待事件狀態(tài)。處理程序一處理程序二開始結(jié)束處理程序三事件一事件二事件三退出事件……24事件驅(qū)動和消息循環(huán)事件驅(qū)動程序設(shè)計是圍繞消息的產(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)用程序消息提供了稱為消息隊列(MessageQueue)的保留區(qū)。操作系統(tǒng)中的每個正在執(zhí)行的程序(應(yīng)用程序、系統(tǒng))都有自己的消息隊列。由操作系統(tǒng)、其他應(yīng)用程序或用戶向應(yīng)用程序發(fā)送的消息都存儲在隊列中,各消息在隊中等待被調(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è)計中的瑣碎細(xì)節(jié)。28簡單的Windows應(yīng)用程序【例HelloWord】:一個最簡單的Windows應(yīng)用程序(1)運(yùn)行MicrosoftVisual2008后,選擇“文件”“新建”菜單命令,打開應(yīng)用程序向?qū)?,顯示出“新建項目”對話框。29(2)在工程名稱框中鍵入Win32應(yīng)用程序項目名稱HelloMsg,單擊[確定]按鈕繼續(xù)。(3)在“下一步”向?qū)е泄催x“空項目”,完成。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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動仲裁調(diào)解協(xié)議書7篇
- 商業(yè)合伙人的協(xié)議書
- 傳統(tǒng)民間工藝品-捏面人簡介
- (參考模板)三通項目立項報告
- 第三次月考試卷-A4
- 重慶2020-2024年中考英語5年真題回-教師版-專題08 閱讀理解之記敘文
- 電能表安06課件講解
- 2023年抗甲狀腺藥項目融資計劃書
- 國華電力危險化學(xué)品安全管理培訓(xùn)課件
- PLC控制技術(shù)試題庫(附參考答案)
- 李商隱詩歌《錦瑟》課件
- 世界文化遺產(chǎn)-樂山大佛課件
- 2022小學(xué)一年級數(shù)學(xué)活用從不同角度解決問題測試卷(一)含答案
- 博爾赫斯簡介課件
- 2021年山東交投礦業(yè)有限公司招聘筆試試題及答案解析
- 施工單位資料檢查內(nèi)容
- 大氣課設(shè)-酸洗廢氣凈化系統(tǒng)
- 學(xué)校校慶等大型活動安全應(yīng)急預(yù)案
- 檢測公司檢驗(yàn)檢測工作控制程序
- 高血壓病例優(yōu)秀PPT課件
- 精密電主軸PPT課件
評論
0/150
提交評論