2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第4章 Windows程序設計的基本概念,教學要點 本章內(nèi)容主要包括Windows應用程序的特點,VC兩種編程模式都要用到的基本概念及利用API編寫簡單的Windows程序的方法與步驟。 要求了解回調(diào)函數(shù)和圖形設備接口概念、VC程序的命名規(guī)則和消息驅(qū)動機制,掌握窗口、實例、句柄、資源的概念,熟悉Windows圖形用戶界面中的元素,熟練掌握掌握建立Win32應用程序的步驟和WinMain()函數(shù)

2、形參的含義。,,4.1 Win 32編程特點4.2 Windows程序用到的基本術語 4.3 開發(fā)Windows程序基本步驟,4.1.1Windows運行機制——消息驅(qū)動4.1.2應用程序與Windows操作系統(tǒng)緊密相連4.1.3圖形界面4.1.4 Windows基本數(shù)據(jù)類型,4.1Win 32編程特點,,,消息驅(qū)動,在別的程序設計語言中又叫事件驅(qū)動。在執(zhí)行過程中,如果用戶需要輸入什么參數(shù)或用戶需要作

3、出選擇,程序?qū)⒌却脩舻妮斎?。只有用戶提供了足夠的?shù)據(jù)程序才能繼續(xù)進行下去,否則它將一直等待下去,應用程序不會自己選擇其它的途徑或完成其它的功能,用戶也不能干預程序的運行過程。 在消息驅(qū)動的程序結構中,程序控制流程是由實際運行時各種事件的實際發(fā)生來觸發(fā),而事件的發(fā)生可能是隨機的、不確定的,并沒有預先的順序。消息驅(qū)動是一種面向用戶的程序設計方法,在程序設計過程中除了完成所需要的程序功能之外,更多的是要考慮用戶可能的各種輸入消息,并有針對

4、性地設計相應的處理程序。消息驅(qū)動程序設計還是一種被動式的程序設計方法,程序開始運行時,處于等待消息狀態(tài),當取得消息后就對其作出相應反應,處理完畢后又返回等待消息的狀態(tài)。消息驅(qū)動的程序就是一個不斷產(chǎn)生消息和處理消息的過程是一個更加模塊化、更加獨立的程序。,4.1.1 Windows運行機制——消息驅(qū)動,4.1.2 應用程序與Windows操作系統(tǒng)緊密相連,利用VC進行Windows應用程序開發(fā)的一個顯著特點就是,應用程序與操作系統(tǒng)的

5、聯(lián)系非常密切。對操作系統(tǒng)比較熟悉的人編制程序相對來說就輕松一些,反之,學會利用VC進行Windows應用程序開發(fā)的人,往往會對操作系統(tǒng)有一個清晰的認識。設計C語言的目的就是進行操作系統(tǒng)的開發(fā)。在Windows環(huán)境下開發(fā)程序時,絕對不能忽視操作系統(tǒng)所起的作用,因為我們時時刻刻在與操作系統(tǒng)打交道。 最明顯和操作系統(tǒng)打交道的例子就是消息傳遞。消息與事件緊密相連,事件是源,消息是果,消息是一個事件的代表,程序運行過程中的任何一個事件都產(chǎn)生一個

6、消息,比如按了鍵盤的某個鍵就會產(chǎn)生鍵盤的消息。,,Windows程序設計是消息驅(qū)動的,消息傳遞是它的核心,而消息管理是由 Windows完成的,應用程序要獲得消息就要從操作系統(tǒng)中獲得。應用程序有兩種獲得消息的方式: 回調(diào)函數(shù)一經(jīng)設計好,就成了Windows系統(tǒng)的擴展,就會在發(fā)生別的事件時,由操作系統(tǒng)自動調(diào)用該回調(diào)函數(shù)。在應用程序的任何地方找不到明顯調(diào)用該函數(shù)的地方,用DOS編程觀點來看,似乎此函數(shù)并沒有用到,事實上回調(diào)函

7、數(shù)不僅用到了,而且起了很大作用,正是通過它,應用程序才獲得了消息,才知道當前發(fā)生了什么事件,才根據(jù)不同的事件采取不同的處理措施。,4.1.2 應用程序與Windows操作系統(tǒng)緊密相連(續(xù)),1.應用程序調(diào)用Windows提供的獲取消息函數(shù),如GetMessage()2.由Windows調(diào)用程序員提供的一種特殊函數(shù)——回調(diào)函數(shù)。,4.1.3圖形界面,Windows支持豐富的圖形用戶界面對象,包括窗口、圖標、對話框等。1.窗口窗

8、口是Windows圖形界面中最重要的部分,是屏幕上與一個應用程序相對應的矩形區(qū)域,關閉了一個窗口后,相應的應用程序就被關閉。2.客戶區(qū) 客戶區(qū)是窗口中最大的一塊空白矩形區(qū)域,它是用戶與系統(tǒng)進行交互的主要區(qū)域,一般用于顯示應用程序的輸出。3.標題欄 標題欄位于窗口頂部,其中顯示的文本一般用于標注應用程序的名稱。標題欄的顏色反映該窗口是否是一個活動窗口。標題欄是屬于非客戶區(qū)域。,,4.菜單欄 菜單欄用戶最熟悉,它位

9、于標題欄的下方,橫跨窗口,上面列出了應用程序支持的大部分功能。5.圖標 一個用于提醒用戶的小小圖像,它代表一個應用程序。當一個應用程序最小化時,就呈現(xiàn)為一個圖標。6.光標 Windows光標是顯示在屏幕上的一個位圖 ,用于響應鼠標或其它定位設備的操作。在應用程序中,常常通過改變光標形狀來指出程序的操作狀態(tài)。7.工具欄 工具欄位于菜單欄下方,上面的位圖按鈕代表最常用的命令。讓鼠標在某個按鈕停一會,就會在

10、按鈕下方出現(xiàn)一個黃色的小窗口,里面顯示該按鈕的簡單提示信息。,4.1.3 圖形界面(續(xù)),,8.狀態(tài)欄 狀態(tài)欄位于窗口底端,用于輸出菜單的詳細說明和其它一些提示信息。9.對話框 對話框是一種特殊窗口,主要用于接收用戶輸入和輸出。一般在選擇菜單名稱后面帶有省略號(…)的菜單項時會彈出一個對話框。10.控件 對話框中包含的許多小窗口都是控件。如“查找與替換”對話框上的“查找內(nèi)容(N)后就是一個編輯

11、框控件,“取消”操作就是一個按鈕控件。,4.1.3 圖形界面(續(xù)),,4.1.4 Windows基本數(shù)據(jù)類型,在標準的C/C++語言中,int、char、float、double都是常見的數(shù)據(jù)類型,而在32位Windows的C/C++開發(fā)平臺中,為了滿足數(shù)據(jù)定義需要,又添加了一系列新的數(shù)據(jù)類型。表示指針型的數(shù)據(jù)類型往往以P或LP作為前綴,而句柄型則總是冠以H。在Windows應用程序中,不可避免地要使用各種各樣的句柄。簡單地說,它是

12、用來標識諸如菜單、圖標、窗口、內(nèi)存塊、輸出設備等信息的,通過它可以訪問各種資源。句柄并非對象所在的地址指針,它是作為系統(tǒng)內(nèi)部表的索引值來使用的。譬如說,一個窗口打開之后,對應內(nèi)存中的一個內(nèi)存塊,這個窗口所在的內(nèi)存塊地址往往會由操作系統(tǒng)作動態(tài)調(diào)整,但其句柄卻不會隨之變化,我們不必關心其地址的變化,而是簡單地通過作為窗口標識的句柄來訪問這個窗口。如果該應用程序有幾個副本在同時運行,那么每個這種窗口都會有一個各不相同的句柄。,,表4.1 基本

13、數(shù)據(jù)類型,,表4.1基本數(shù)據(jù)類型(續(xù)),,表4.1基本數(shù)據(jù)類型(續(xù)),4.2Windows程序用到的基本術語,4.2.1 窗口 4.2.2 實例 4.2.3 句柄 4.2.4 資源 4.2.5 窗口函數(shù) 4.2.6 圖形設備接口 4.2.7 回調(diào)函數(shù),4.2.1 窗 口,從表面理解,窗口無非是一個矩形區(qū)域。從程序運行的內(nèi)存組織角度看,窗口對應

14、的是一個數(shù)據(jù)結構WNDCLASS,從用戶的角度看,窗口是用戶輸入輸出數(shù)據(jù)的一個接口,通過它,Windows應用程序才能取得外部的數(shù)據(jù)并把處理后的數(shù)據(jù)顯示在屏幕矩形區(qū)域中。從程序的內(nèi)部處理過程看,每一個窗口對應著一個應用程序的消息處理隊列,應用程序主要通過窗口函數(shù)來對用戶的輸入進行處理。 可見窗口是Windows應用程序基本操作單元,是應用程序與用戶之間交互的接口環(huán)境,也是系統(tǒng)管理應用程序的基本單位。編寫一個Windows的應

15、用程序首先應創(chuàng)建一個或多個窗口,隨后應用程序的運行過程即是窗口內(nèi)部、窗口和窗口之間、窗口和系統(tǒng)之間進行數(shù)據(jù)處理和數(shù)據(jù)交換的過程。作為一個Windows程序設計人員,我們首先要搞清Windows這個數(shù)據(jù)結構。,4.2.2 實例,一個實例代表一個可執(zhí)行程序在內(nèi)存中的拷貝。在Windows系統(tǒng)中,可執(zhí)行程序的每次運行都代表完全獨立的進程,各個進程都有自己的虛擬地址空間。若一個應用程序執(zhí)行許多次,在內(nèi)存中就有多個程序的拷貝,也可以說是一個應用

16、程序在內(nèi)存中有多個實例。應用程序的實例句柄對于管理整個應用程序的資源很重要,因此我們常常在Windows程序的入口WinMain()處將實例句柄保存在全局變量中。,4.2.3句柄,句柄這個概念在Windows的程序設計中常常碰到。Windows對絕大多數(shù)對象的引用都是通過句柄來進行的。在Windows環(huán)境中,句柄可以用來標識模塊、任務、實例、文件、內(nèi)存塊、菜單、控件、字體、資源、,包括圖標、光標、字符串、GDI對象,包括位圖)、

17、畫刷、元文件、調(diào)色板、畫筆、區(qū)域以及設備描述表。Windows程序并不是用物理地址來標識一個內(nèi)存塊、文件、任務或動態(tài)裝入模塊的,相反,Windows API給這些項目分配確定的句柄,并將句柄返回給應用程序,然后通過句柄來進行操作。句柄是內(nèi)部表格的索引值,Windows通過句柄到內(nèi)部表格中去存取相關信息。因此應用程序只能處理到句柄的層次,并不能直接獲取表格中的數(shù)據(jù)。表4.5是常見的句柄類型及其含義。,表4.5 常見的句柄類型及其含義,

18、4.2.4 資源,一個Windows程序,往往有菜單、工具條、對話框、位圖、圖標、加速鍵、字符串等,這些元素都被稱為資源。應用程序不僅可以使用操作系統(tǒng)所提供的資源,而且可以在VC開發(fā)環(huán)境中利用相應的資源編輯器建立自己的資源。應用程序的資源被定義在.RC文件中,資源可以預先編輯、獨立編譯,最后與可執(zhí)行模塊鏈接在一起,形成可獨立執(zhí)行的.EXE文件或動態(tài)鏈接庫文件.DLL。當應用程序需要這些資源時,可以利用Windows的API函數(shù)將這些

19、資源調(diào)入??梢姡琖indows應用程序的資源是自己攜帶的,這要比將資源作為外部文件方便的多。由于資源與程序代碼是分離的,“招之即來,揮之即去”,當使用時才調(diào)入內(nèi)存,這減少了程序運行時對內(nèi)存的消耗量。,4.2.5 窗口函數(shù),由于窗口是應用程序與用戶交互的接口,當窗口接受到輸入時,必定交給某個函數(shù)加以處理,這個負責處理消息的函數(shù)就是窗口函數(shù),它決定了當一個消息被接收時所采取的動作。窗口函數(shù)是一個對每一個消息利用switch語句進行處理的

20、函數(shù),它是Windows消息驅(qū)動機制的發(fā)動機。下一節(jié)以一個具體的實例來詳細解釋。,4.2.6 圖形設備接口,Windows應用程序的全部輸出(包括顯示和打印)都必須通過圖形設備接口(Graphic Device Interface,簡稱GDI)中的函數(shù)來完成,GDI是Windows系統(tǒng)重要組成部分,負責系統(tǒng)與用戶或繪圖程序之間的信息交換,并控制在輸出設備上顯示圖形或文字。其最大作用就是將程序員與具體的物理設備相隔離,使得程序員沒有必要

21、考慮具體設備的操作細節(jié)(如顯示緩存的地址、打印機的端口等),無論是使用顯示還是打印,使用的都是同一個API函數(shù)。 通俗的來說,我們可以把GDI看作一個大的繪圖工具箱,所有在窗口上所繪制的東西,都必須使用工具箱中的東西,即GDI中函數(shù)。學習GDI,關鍵是要搞清楚這些函數(shù)的分類及其用法。,4.2.7回調(diào)函數(shù),回調(diào)函數(shù),顧名思義,就是寫好了等著別人來調(diào)用的函數(shù)。這些函數(shù)的原型都是由調(diào)用者自己定義好的,使用的時候,只要按照原型定義一個函

22、數(shù),然后將函數(shù)指針傳遞過去就行了。它們只能通過Windows操作系統(tǒng)來調(diào)用,這些函數(shù)我們可以根據(jù)自己的需要設計,但不能直接調(diào)用它們。回調(diào)函數(shù)必須嚴格地按Windows系統(tǒng)的規(guī)定進行說明和定義。前面所所的“窗口函數(shù)”就是一個典型的回調(diào)函數(shù),當注冊窗口類時,要將函數(shù)地址告訴Windows,Windows通過調(diào)用該窗口函數(shù)來讓窗口處理消息。當發(fā)送消息給程序時,Windows調(diào)用此函數(shù)進行消息的處理。窗口函數(shù)調(diào)用約定、返回值以及參數(shù)都是固定的

23、,程序員必須按其規(guī)定進行才能正常工作。,4.3開發(fā)Windows程序基本步驟,這節(jié)以一個簡單的Windows應用程序為例來講解編寫Windows程序的基本步驟,除了了解創(chuàng)建的步驟外,還要熟悉每個步驟所操作的對象與應用程序的關系。 【例4-1】調(diào)用API函數(shù)MessageBox()實現(xiàn)一個簡單的Windows程序。,4.3.1建立一個Win32工程4.3.2建立頭文件4.3.3建立Win32 Application實現(xiàn)文件

24、4.3.4分析Win32應用程序*4.3.5建立資源文件*4.3.6VC編程流程及各組件作用*4.3.7VC項目中的文件類型,,,,,,,,4.3.1建立一個Win32工程,在Windows環(huán)境下,一個應用程序的組織是以工程為單位來進行的,這與利用TC來開發(fā)DOS下的應用程序大不相同。在TC下,一個應用程序主要包含一個.C文件,而用VC開發(fā)應用程序時,一個應用程序包括各種各樣的文件(通過文件擴展名來標識,具體信息見 4

25、.3.6節(jié))。 工程文件是整個應用程序的總調(diào)度中心,負責調(diào)度構建Windows程序的各個職能部門(各類文件),因此開發(fā)一個應用程序,首先要利用應用程序向?qū)ppWizard創(chuàng)建一個工程程序。利用向?qū)鶆?chuàng)建的一個工程程序,實質(zhì)上是一個應用程序的框架。,,4.3.2建立頭文件,當利用AppWizard創(chuàng)建好一個工程后,也就創(chuàng)建了一個應用程序架構。對于滿足特定用戶需要的應用程序,我們還必須在其中添加一些東西。因此就必須利用VC工具去添加。

26、如果把上節(jié)創(chuàng)建的工程比做一個人的骨架話,下面幾節(jié)創(chuàng)建的文件就類似與人的血肉。下面講如何創(chuàng)建頭文件這塊血肉,并闡明該血肉的功能。1.打開Visual C++的集成開發(fā)環(huán)境Developer Studio。2.擇菜單命令“File|New|Files”。該選項下給出了VC可以創(chuàng)建的各種文件的類型。由于我們要創(chuàng)建頭文件,因此我們選擇“C/C++ Header File”。并在File編輯框里輸入頭文件的名稱。一般所創(chuàng)建的頭文件要添加到當前

27、的工程中,因而要把“Add To Project”選擇框選中。,4.3.3 建立Win32 Application實現(xiàn)文件,頭文件一般存放在.h文件中,其相應的實現(xiàn)文件要放到對應的實現(xiàn)文件.cpp中。下面是在工程中添加實現(xiàn)文件的步驟: 1.啟動Visual C++的集成開發(fā)環(huán)境Developer Studio。 2.選擇菜單命令“File|New|Files”。選擇“C/C++ Source File”,并在File

28、編輯框里輸入實現(xiàn)文件的名稱“FirstApiProg”。一般所創(chuàng)建的實現(xiàn)文件要添加到當前的工程中,因而要把“Add To Project”選擇框選中。 3.單擊“OK”按鈕,VC自動進入到文件FirstApiProg.cpp編輯的編輯狀態(tài),,4.選擇“Build|Build FirstApiProg.exe”菜單項創(chuàng)建可執(zhí)行文件,然后選擇“Build|Execute FirstApiProg.exe”菜單項執(zhí)行剛才創(chuàng)建的可執(zhí)行文

29、件FirstApiProg.exe,程序運行結果如圖4.2所示。,4.3.3 建立Win32 Application 實現(xiàn)文件(續(xù)),4.3.4 分析Win32應用程序,1.windows應用程序的頭文件 在FirstApiProg.cpp文件的開頭有一個重要的頭文件windows.h,該文件是所有Windows應用程序運行必須的一個頭文件。該頭文件中包含了許多其它頭文件,在Windows

30、下搜索出該文件,打開并觀察其內(nèi)容,可以看出在其中包含的的比較重要的頭文件如下: #include //用于定義基本數(shù)據(jù)類型 #include #include #include 在這些頭文件中定義了windows所支持的基本數(shù)據(jù)類型、數(shù)據(jù)結構、常用的標識符和操作系統(tǒng)所提供的所有API函數(shù)原型聲明。,,4.3.4 分析Win32應用程序(續(xù)),2.Windows應用程序的入口點在第

31、一篇的控制臺應用程序中,程序的入口點總是main()函數(shù),如需要編寫具有圖形用戶界面的Windows應用程序,則程序的入口點變成了WinMain()。 (1)WinMain()的函數(shù)原型 WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ); 由于Wind

32、ows應用程序可能并行地執(zhí)行多次,因而可能出現(xiàn)同一個應用程序的多個窗口同時存在的情況,Windows系統(tǒng)將應用程序每一次執(zhí)行稱為該應用程序的一個實例,并使用一個實例句柄來標識它。,,在WinMain()函數(shù)中,hInstance是當前應用程序的實例句柄。參數(shù)lpCmdLine是指程序運行時的命令行參數(shù),整型參數(shù)nCmdShow規(guī)定了窗口如何顯示,當它的值為SW_SHOWNORMAL時代表正常顯示,值為SW_MINIMIZE代表最小化顯示

33、,值為SW_MAXIMIZE時代表最大化顯示等。,4.3.4分析Win32應用程序(續(xù)),,3. MessageBox函數(shù) MessageBox是一個Woindows API函數(shù),它通過彈出一個消息對話框來顯示一些簡短的信息。如報告任務的完成、報告一條嚴重的錯誤等。該函數(shù)的原型為: int MessageBox( HWND hWnd, // 所屬窗口的句柄 LPCTSTR lpText, //

34、 需要顯示的提示信息 LPCTSTR lpCaption, // 對話框窗口的標題字符串 UINT uType // 消息對話框的按鈕和圖標類型 );該函數(shù)的第四個參數(shù)可以指定對話框顯示的按鈕和和圖標類型。常用的提示圖標類型有MB_ICONQUESTION(“問號”圖標),MB_ICONSTOP(“出錯”圖標)等。,4.3.4分析Win32應用程序(續(xù)),*4.3.5建立資源文件,在VC中打開一個工

35、程,要向其中添加一個資源,可通過下面的方法。1.啟動Visual C++的集成開發(fā)環(huán)境Developer Studio。2.選擇菜單命令“Insert|Resource…”,彈出“Insert Resource”對話框。3.在“Insert Resource”對話框中選擇資源類型,單擊“New”按鈕生成一個新的資源。,4.3.6 VC編程流程及各組件作用,用VC開發(fā)的應用程序比較大,一個應用程序牽涉到很多類型的文件,在VC6

36、.0的集成開發(fā)環(huán)境中包含有多個與開發(fā)程序相關的組件。如文本編輯器、資源編輯器、類向?qū)?、編譯器、鏈接器、調(diào)試器等。從一個項目的確立到開發(fā)測試完畢要經(jīng)過很多階段,在不同的階段,不同的組件其著不同的作用。圖4.3顯示了VC應用程序創(chuàng)建過程的一個綜述。流程圖(4.3),流程圖,*4.3.7VC項目中的文件類型,VC編程過程中,在相應的工程目錄中會生成很多類型文件。它們都是與項目有關的文件,不能隨意刪除和修改它們。表4.7為VC應用程序中的

溫馨提示

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

評論

0/150

提交評論