




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Windows編程
基礎知識主要內容Windows編程特點、特性動態鏈接庫和靜態鏈接庫Windows的基本數據類型窗口和句柄過程驅動和消息驅動簡單Windows應用程序演示2創建Win32項目3編譯運行,生成窗口4在這個窗口上,我們可以用鼠標、鍵盤跟應用程序交互。例如,用鼠標、鍵盤操作菜單;用鼠標拖動窗口等等。經過后面的學習,我們就可以添加更多的功能到應用程序,例如用鍵盤、鼠標控制精靈在窗口中移動,碰到怪物后展開戰斗等等。5Windows編程特點、特性動態鏈接庫和靜態鏈接庫Windows的基本數據類型窗口和句柄過程驅動和消息驅動6圖形用戶接口(GUI
GraphicalUserInterface) Windows為應用程序提供了窗口、菜單等等,這些圖形提供了使用屏幕的最佳方式。多任務環境
為便于多個程序的使用,以及這些程序間信息的交換,Windows支持多任務。在同一時刻能有多個Windows程序顯示并運行。動態鏈接庫 Windows上執行的程序可共享動態鏈接庫中的內容。Windows運行機制的核心就是“動態鏈接”。7
一個完整的Windows應用程序除了WinMain函數外,包含用于處理用戶動作和窗口消息的窗口函數。
一個Windows應用程序還常常具有一些特性:
消息驅動機制
圖形設備接口(GDIGraphicsDeviceInterface)
基于資源的程序設計
動態鏈接庫81.消息驅動機制
Windows程序和控制臺應用程序之間一個最根本區別,在于控制臺應用程序是通過調用系統函數來獲得用戶輸入,而Windows程序則是通過系統發送的消息來處理用戶輸入。 Windows操作環境中,無論是系統產生的動作或用戶運行應用程序產生的動作,稱為事件(Events)產生的消息(Message)。9
2.圖形設備接口(GDI)
Windows則提供了一個抽象的接口,稱為圖形設備接口,使得程序員直接利用系統的GDI函數就能方便實現圖形和文本的輸出。基于資源的程序設計
Windows應用程序包含眾多圖形元素,如光標、菜單、工具欄、位圖、對話框等。104.動態鏈接庫在Windows操作系統中,最主要的DLL有KERNEL32.DLL、GDI32.DLL和USER32.DLL。KERNEL32.DLL用來處理存儲器低層功能、任務和資源管理等Windows核心服務;GDI32.DLL提供圖形設備接口,管理用戶界面和圖形繪制,包括Windows元文件、位圖、設備描述表和字體等;USER32.DLL負責窗口的管理,包括消息、菜單、光標、計時器及其它與控制窗口顯示相關的功能。11Windows編程特點、特性動態鏈接庫和靜態鏈接庫Windows的基本數據類型窗口和句柄過程驅動和消息驅動12靜態鏈接庫技術DOS環境下的C語言是依賴其運算函數庫運行的。如程序中用到了庫函數printf,鏈接程序將從運算函數庫中拷入printf函數到程序內存中來,形成可執行文件。這種方法叫靜態鏈接。程序員還可以建立自己的函數庫,在其中實現常用的功能或標準庫里沒有的函數。這很大程度上解放了程序員,使其不必反復編碼重復工作。消除了重復編碼的現象。靜態鏈接庫也帶來了問題。多個程序在Windows環境下共享內存,每個程序都保存一個公用函數副本,這顯然導致了內存的浪費。13動態鏈接庫技術動態鏈接庫(DLL)技術是Windows的重要技術。鏈接程序并不把庫函數拷入程序的可執行文件,而是由程序的可執行文件在執行過程中調用庫函數。這種方法節約了內存,無論多少并行程序,要用到某個函數時,該函數在內存中只有一個拷貝。此外,當函數被修改后,不必重新鏈接調用該函數的可執行文件。這樣就解決了靜態鏈接庫使用中浪費內存的問題,修改后也不需要重新鏈接,使用方便有效。14動態鏈接庫技術DLL的實質是一個可執行模塊,它可以包括Windows應用程序所有的函數,以及資源和其他代碼。但DLL本身不會自己運行,它將駐留內存而其他應用程序來調用它。在VC++中我們可以編寫自己的動態鏈接庫。我們在Windows目錄下的system文件夾中會看到大量的鏈接庫(*.DLL)。15Windows編程特點、特性動態鏈接庫和靜態鏈接庫Windows的基本數據類型窗口和句柄過程驅動和消息驅動進程和線程16Windows常用的基本數據類型Windows數據類型所對應的基本數據類型說明BOOLbool布爾值BYTEunsignedchar8位無符號整數COLORREFunsignedlong用作顏色值的32位值DWORDunsignedlong32位無符號整數,段地址和相關的偏移地址LONGlong32位帶符號整數LPARAMlong作為參數傳遞給窗口過程或回調函數的32位值LPCSTRconstchar*指向字符串常量的32位指針LPSTRchar*指向字符串的32位指針LPVOIDvoid*指向未定義類型的32位指針LRESULTlong來自窗口過程或回調函數的32位返回值UINTunsignedint32位無符號整數WORDunsignedshort16位無符號整數WPARAMunsignedint當作參數傳遞給窗口過程或回調函數的32位值17HINSTANCE和LPSTR等,這樣的數據類型只是一些基本數據類型的別名。需要說明的是:這些基本數據類型都是用大寫字符來表示,以與一般C++基本數據類型相區別。凡是數據類型的前綴是P或LP,則表示該類型是一個指針或長指針數據類型。若前綴是U,則表示無符號數據類型,等等。
Windows還提供一些宏來處理上述基本數據類型。例如,LOBYTE和HIBYTE分別用來獲取16位數值中的低位和高位字節;LOWORD和HIWORD分別用來獲取32位數值中的低位字和高位字;MAKEWORD是將兩個16位無符號值結合成一個32位無符號值,等等。18Windows編程特點、特性動態鏈接庫和靜態鏈接庫Windows的基本數據類型窗口和句柄過程驅動和消息驅動進程和線程19窗口Windows應用程序基本的操作單元;應用程序與用戶之間交互的接口;是系統管理應用程序的基本單位。Windows應用程序首先創建一個或多個窗口;程序運行過程就是某個窗口內部、多個窗口之間、窗口與系統之間的交互過程。20句柄句柄(HANDLE)是一個4字節長的、無符號的惟一整數值(long型),用于標識應用程序中的各種對象、資源。例如窗口、光標、應用程序實例等等。系統就是通過句柄來找到相應的對象、資源,從而來進行管理和操作的。按資源的類型,又可將句柄細分成圖標句柄(HICON),光標句柄(HCURSOR),窗口句柄(HWND),應用程序實例句柄(HINSTANCE)等等各種類型的句柄。例如,操作系統給每一個窗口指定了一個唯一的標識號即窗口句柄。21Windows編程特點、特性動態鏈接庫和靜態鏈接庫Windows的基本數據類型窗口和句柄過程驅動和消息驅動進程和線程22過程驅動DOS下開發程序主要使用順序的、過程驅動的程序設計方法。其特點是程序有明顯的開始、明顯的執行過程、明顯的的結束。執行過程中,程序直接控制事件或過程的順序。這樣的程序設計方法是面向過程而不是面向用戶的,交互性差,用戶界面不夠友好,它強迫用戶按照某種不可更改的模式進行工作。…程序模塊一程序模塊N…開始結束23事件驅動Windows程序是事件驅動的,由事件的發生來控制程序走向。是一種“被動”式程序設計方法,程序開始運行時,處于等待用戶輸入事件狀態,然后取得事件并作出相應反應,處理完畢又返回并處于等待事件狀態。處理程序一處理程序二開始結束處理程序三事件一事件二事件三退出事件……24事件驅動和消息循環事件驅動程序設計是圍繞消息的產生、處理而展開的,消息是關于發生的事件的信息。例如:一個鍵或鼠標被按下,產生了一個消息;當松開時,又產生了另一個消息。Windows應用程序所做的主要工作就是對這些消息進行處理。消息可由應用程序本身產生,也可以由運行的其他程序產生,還可以由用戶或Windows產生。每當事件發生時,Windows根據傳來的消息做出記錄并將相應的消息分配到有關的應用程序。25事件驅動和消息循環Windows為應用程序消息提供了稱為消息隊列(MessageQueue)的保留區。操作系統中的每個正在執行的程序(應用程序、系統)都有自己的消息隊列。由操作系統、其他應用程序或用戶向應用程序發送的消息都存儲在隊列中,各消息在隊中等待被調用。Windows應用程序以特定的循環調用Windows消息,即消息循環(MessageLoop)。消息循環是一個簡單的While()循環,它一直運行,直到接收到終止執行的消息才會關閉應用程序,停止循環。26Windows應用程序的基本流程27WindowsAPI和MFCApplicationProgrammingInterface應用程序接口。學習WindowsAPI將使您更深入地了解Windows工作的方式。
使用C++語言和WINOWSAPI不是編寫Windows程序的唯一方法。然而,這種方法卻提供給您最佳的性能、最強大的功能和在發掘Windows特性方面最大的靈活性。MicrosoftFoundationClassLibrary(MFC)在一組C++類別中封裝了許多Windows程序設計中的瑣碎細節。28簡單的Windows應用程序【例HelloWord】:一個最簡單的Windows應用程序(1)運行MicrosoftVisual2008后,選擇“文件”“新建”菜單命令,打開應用程序向導,顯示出“新建項目”對話框。29(2)在工程名稱框中鍵入Win32應用程序項目名稱HelloMsg,單擊[確定]按鈕繼續。(3)在“下一步”向導中勾選“空項目”,完成。30(5)在文檔編輯窗口中輸入下面的代碼:#include<windows.h>intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){MessageBox(NULL,TEXT("你好,我的VisualC++世界!"),TEXT("問候"),0);return0;
}31編譯并運行程序從上面的程序可以看出,WinMain函數的原型如下:intWINAPIWinMain(HINSTANCEhInstance, //當前實例句柄HINSTANCEhPrevInstance,
//
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 營養與環境可持續發展的關系試題及答案
- 系統規劃與管理的創新案例試題及答案
- 積極探索2025年公共衛生執業醫師考試試題及答案
- 藥劑藥品監督管理相關知識題及答案
- 藥劑考試回顧與前瞻試題及答案
- 醫學教育在繼續教育中的應用及實踐案例探討試題及答案
- 狼中考試題及答案
- 衛生管理考試的實踐與應用試題及答案
- 育嬰師職業技能與知識檢測試題及答案
- 素質教育概括試題及答案
- 門頭廣告合同協議
- 2024-2025學年人教新版七年級下冊數學期中復習試卷(含詳解)
- 2025年中國電船制造行業市場全景監測及投資前景展望報告
- 2025河北保定鈔票紙業有限公司人員招聘29人筆試參考題庫附帶答案詳解
- 初三歷史教學經驗交流會發言稿
- 企業事故隱患內部報告獎勵制度
- 寧夏回族自治區銀川市、石嘴山市2025屆高三二模考試語文試題(含答案)
- 2024年山東省濟南市中考數學試卷【含解析】
- 汽車發動機構造與維修試題
- 2025-2030中國生物酶制劑行業市場現狀供需分析及投資評估規劃分析研究報告
- 現代物流校考題目及答案
評論
0/150
提交評論