VisualC環境下Windows程序開發概述_第1頁
VisualC環境下Windows程序開發概述_第2頁
VisualC環境下Windows程序開發概述_第3頁
VisualC環境下Windows程序開發概述_第4頁
VisualC環境下Windows程序開發概述_第5頁
已閱讀5頁,還剩54頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第第12章章 Visual C+環境下環境下Windows程序開發概述程序開發概述n12.1 Visual C+可視化集成開發環境可視化集成開發環境n12.2 創建、組織文件、工程和工作區創建、組織文件、工程和工作區n12.3 Windows編程基礎編程基礎n12.4 Win32開發開發n12.5 MFC編程編程12.1 Visual C+可視化集成開發環境可視化集成開發環境n12.1.1 Visual C+簡介簡介n12.1.2 項目開發過程項目開發過程n12.1.3 集成開發環境集成開發環境Developer Studion12.1.4 常用功能鍵及其意義常用功能鍵及其意義返回首頁12.1

2、.1 Visual C+簡介簡介n1Visual C+集成開發環境(集成開發環境(IDE)集成開發環境(集成開發環境(IDE)是一個將程序編輯器、編譯器、調是一個將程序編輯器、編譯器、調試工具和其他建立應用程序的工具集成在一起的用于開試工具和其他建立應用程序的工具集成在一起的用于開發應用程序的軟件系統。發應用程序的軟件系統。 n2向導(向導(Wizard)向導是一個通過一步步的幫助引導你工作的工具。向導是一個通過一步步的幫助引導你工作的工具。Developer Studio中包含三個向導中包含三個向導 。n 3MFC庫庫庫(庫(library)是可以重復使用的源代碼和目標代碼的集合。是可以重復

3、使用的源代碼和目標代碼的集合。MFC(Microsoft Fundamental Classes)是是Visual C+開發環境所帶的類庫,在該類庫中提供了大量的類,開發環境所帶的類庫,在該類庫中提供了大量的類,可以幫助開發人員快速建立應用程序。可以幫助開發人員快速建立應用程序。 返回本節12.1.2 項目開發過程項目開發過程一個用C+開發項目的通用開發過程如圖12-1所示。 n建立一個項目的第一步是利用編輯器建立程序代碼文件,建立一個項目的第一步是利用編輯器建立程序代碼文件,包括頭文件、代碼文件、資源文件等。然后,啟動編譯包括頭文件、代碼文件、資源文件等。然后,啟動編譯程序,編譯程序首先調用

4、預處理程序處理程序中的預處程序,編譯程序首先調用預處理程序處理程序中的預處理命令(如理命令(如#include,#define等),經過預處理程序處等),經過預處理程序處理的代碼將作為編譯程序的輸入。編譯對用戶程序進行理的代碼將作為編譯程序的輸入。編譯對用戶程序進行詞法和語法分析,建立目標文件,文件中包括機器代碼、詞法和語法分析,建立目標文件,文件中包括機器代碼、連接指令、外部引用以及從該源文件中產生的函數和數連接指令、外部引用以及從該源文件中產生的函數和數據名。此后,連接程序將所有的目標代碼和用到的靜態據名。此后,連接程序將所有的目標代碼和用到的靜態連接庫的代碼連接起來,為所有的外部變量和函

5、數找到連接庫的代碼連接起來,為所有的外部變量和函數找到其提供地點,最后產生一個可執行文件。一般有一個其提供地點,最后產生一個可執行文件。一般有一個makefile文件來協調各個部分產生可執行文件。文件來協調各個部分產生可執行文件。返回本節12.1.3 集成開發環境集成開發環境Developer Studion1進入進入Developer Studion2Developer Studio的界面的界面n3獲得幫助信息獲得幫助信息n4Visual C+的編輯器的編輯器圖12-2 Developer Studio界面Developer Studio它具有以下特點:它具有以下特點: n(1)自動語法。)

6、自動語法。 n(2)自動縮進。)自動縮進。 n(3)參數幫助。)參數幫助。 n(4)集成的關鍵字幫助。)集成的關鍵字幫助。 n(5)拖放編輯。)拖放編輯。 n(6)自動錯誤定位。)自動錯誤定位。 返回本節12.1.4 常用功能鍵及其意義常用功能鍵及其意義表12-1 常用功能鍵返回本節12.2 創建、組織文件、工程和工作區創建、組織文件、工程和工作區n12.2.1 新建工程新建工程n12.2.2 新建工作區新建工作區n12.2.3 增加已有文件到工程中增加已有文件到工程中n12.2.4 打開工作區打開工作區n12.2.5 設置當前工程設置當前工程返回首頁12.2.1 新建工程新建工程n項目工作區

7、是一個包含用戶的所有相關項目和項目工作區是一個包含用戶的所有相關項目和配置的實體。工程定義為一個配置和一組文件,配置的實體。工程定義為一個配置和一組文件,用以生成最終的程序或二進制文件。一個項目用以生成最終的程序或二進制文件。一個項目工作區可以包含多個工程,這些工程既可以是工作區可以包含多個工程,這些工程既可以是同一類型的工程,也可以是不同類型的工程同一類型的工程,也可以是不同類型的工程(如(如Visual C+和和Visual J+工程)。工作區工程)。工作區現在以現在以.dsw為后綴名(以前為為后綴名(以前為.mdp),),項目文項目文件現在以件現在以.dsp(以前為以前為.mak)為后綴

8、名。項目為后綴名。項目工作區如圖工作區如圖12-3所示。所示。圖12-3 項目工作區n要新建一個工程,可以:要新建一個工程,可以:n(1)在)在File菜單上,單擊菜單上,單擊New,選擇選擇Projects標簽。標簽。n(2)從列表中選擇項目類型)從列表中選擇項目類型n(3)單擊)單擊Create New Workspace(新建工作新建工作區)或區)或Add to Current Workspace(加入到當加入到當前工作區中)。前工作區中)。n( 4 ) 要 使 新 工 程 為 子 工 程 , 可 以 選 擇) 要 使 新 工 程 為 子 工 程 , 可 以 選 擇Dependency

9、of 檢查框,并從列表中選擇一個檢查框,并從列表中選擇一個工程。工程。n(5)在)在Project Name框中,輸入新工程名,確框中,輸入新工程名,確保該名字必須與工作區中的別的工程名字不重保該名字必須與工作區中的別的工程名字不重名。名。n(6)在)在Location框中,指定工程存放的目錄:框中,指定工程存放的目錄:可以直接輸入路徑名,也可以單擊旁邊的可以直接輸入路徑名,也可以單擊旁邊的Browse按鈕,瀏覽選擇一個路徑。按鈕,瀏覽選擇一個路徑。n(7)單擊)單擊Platform框中的相應檢查框,指定工框中的相應檢查框,指定工程的開發平臺程的開發平臺返回本節12.2.2 新建工作區新建工作

10、區n要創建一個空的工作區,可以:要創建一個空的工作區,可以: n(1)在)在File菜單上,單擊菜單上,單擊New。n(2)在隨后彈出的對話框上,單擊在隨后彈出的對話框上,單擊Workspace標簽。標簽。n(3)從類型列表中選擇)從類型列表中選擇Blank Workspace。n(4)在在Workspace Name框中輸入名字,注意框中輸入名字,注意名字不能與它將要包含的工程同名。名字不能與它將要包含的工程同名。n(5)在)在Location框中指定存放工作區文件的目框中指定存放工作區文件的目錄。錄。n(6)單擊)單擊OK。返回本節12.2.3 增加已有文件到工程中增加已有文件到工程中n(

11、1)打開包含目標工程的項目工作區文件。)打開包含目標工程的項目工作區文件。n(2)在)在Project菜單上,單擊菜單上,單擊Add to Project,然后單擊然后單擊Files。n(3)在在Insert Files into Project對話框中,瀏對話框中,瀏覽并定位要加入到工程中的文件名,然后選擇覽并定位要加入到工程中的文件名,然后選擇它們。它們。n(4)從)從Insert Into中選擇工程名字,然后單擊中選擇工程名字,然后單擊OK。返回本節12.2.4 打開工作區打開工作區n選擇選擇File-Open Workspace,指定要打開的工指定要打開的工作區;或選擇作區;或選擇Fi

12、le-Recent Workspaces ,從最從最近打開過的工作區列表中選擇一個。近打開過的工作區列表中選擇一個。返回本節12.2.5 設置當前工程設置當前工程n選擇選擇Project Setting,可以為當前工程設置編可以為當前工程設置編譯、鏈接譯、鏈接和和C/C+等各種選項。等各種選項。 返回本節12.3 Windows編程基礎編程基礎n12.3.1 Windows APIn12.3.2 Windows基礎基礎n12.3.3 Windows消息映射和處理消息映射和處理返回首頁12.3.1 Windows APIn1Windows API的定義的定義Windows API是應用程序編程接

13、口(是應用程序編程接口(Application Programming Interface)的英文縮寫。它是大量函數的英文縮寫。它是大量函數加上數字常量、宏、結構、類型以及其他相關項的集合。加上數字常量、宏、結構、類型以及其他相關項的集合。n2Windows API函數的分類函數的分類根據根據Windows API函數的功能,可以將其分為三類:函數的功能,可以將其分為三類:(1)窗口管理函數。用以實現窗口的創建、移動和修改功)窗口管理函數。用以實現窗口的創建、移動和修改功能。能。(2)圖形設備()圖形設備(GUI)函數。用以實現與設備無關的圖形函數。用以實現與設備無關的圖形操作功能。操作功能。

14、(3)系統服務函數。用以實現與操作系統有關的多種功能。)系統服務函數。用以實現與操作系統有關的多種功能。返回本節12.3.2 Windows基礎基礎n1事件事件 事件以如下三種方式產生:事件以如下三種方式產生:(1)通過輸入設備,如鍵盤和鼠標。)通過輸入設備,如鍵盤和鼠標。(2)通過屏幕上的可視對象,如菜單、工具欄按鈕、滾動)通過屏幕上的可視對象,如菜單、工具欄按鈕、滾動條和對話框上的控件。條和對話框上的控件。(3)來自)來自Windows內部。內部。2消息消息但但Windows捕獲一個事件后,它會編寫一條消息,并將相捕獲一個事件后,它會編寫一條消息,并將相關信息放入一個數據結構中,然后將包含

15、此數據結構的關信息放入一個數據結構中,然后將包含此數據結構的消息發送給需要此消息的程序。消息發送給需要此消息的程序。Windows消息是在消息是在Windows文件中用宏定義的常數。消息常數名通常以文件中用宏定義的常數。消息常數名通常以WM開頭,格式為開頭,格式為WM_XXX。n3繪圖及設備環境繪圖及設備環境Windows具有圖形用戶界面(具有圖形用戶界面(GUI),),它包括菜它包括菜單、工具欄、滾動條和對話框中的按鈕等元素。單、工具欄、滾動條和對話框中的按鈕等元素。n4對象與句柄對象與句柄對設備環境的訪問是通過對設備環境的訪問是通過Windows返回的句柄進返回的句柄進行的。行的。 n5坐

16、標系坐標系要為繪制和其他任務指定位置,需要坐標系統。要為繪制和其他任務指定位置,需要坐標系統。Windows提供了提供了8種不同的坐標系。種不同的坐標系。 返回本節12.3.3 Windows消息映射和處理消息映射和處理n開始執行開始執行n在在Windows中,管理消息的方式通常是這樣的:中,管理消息的方式通常是這樣的:當發生某個消息后,該消息進入消息隊列,操當發生某個消息后,該消息進入消息隊列,操作系統根據消息提供的信息決定由哪個應用程作系統根據消息提供的信息決定由哪個應用程序來處理,該應用程序依照一定的方式查找應序來處理,該應用程序依照一定的方式查找應用程序各個類的消息映射(一組宏,這些宏

17、用用程序各個類的消息映射(一組宏,這些宏用來確定某個消息及相應的處理程序的對應關來確定某個消息及相應的處理程序的對應關系),找到處理程序,然后由處理程序執行。系),找到處理程序,然后由處理程序執行。圖圖12-4是是Windows程序和程序和Windows消息的基本消息的基本流程。流程。圖12-4 Windows程序和Windows消息處理的基本流程Windows程序要處理的消息種類如下:程序要處理的消息種類如下:n(1)Windows消息。該類消息以消息。該類消息以WM_開頭開頭(WM_COMMAND例外),通常由窗口和視圖例外),通常由窗口和視圖來處理。來處理。 n(2)由控件和其他子窗口發

18、送給父窗口的)由控件和其他子窗口發送給父窗口的WM_COMMAND消息。這些消息中包括消息。這些消息中包括EN_CHANGE通知碼。通知碼。n(3)來自于用戶界面對象)來自于用戶界面對象的的WM_COMMAND消息。這些用戶界面對象包括菜單、工具欄按消息。這些用戶界面對象包括菜單、工具欄按鈕和快捷鍵。鈕和快捷鍵。 返回本節12.4 Win32開發開發n12.4.1 搶先式多任務和多線程搶先式多任務和多線程n12.4.2 連續的地址空間和先進的內存管理連續的地址空間和先進的內存管理n12.4.3 內存映射文件內存映射文件n12.4.4 Win32s:Windows 3.x對對Win32 API的

19、的支持支持n12.4.5 Win32編程基礎編程基礎返回首頁nWin32可以應用于特定的操作系統,這種系統可以應用于特定的操作系統,這種系統可以直接控制和處理可以直接控制和處理PC硬件資源,而不必象硬件資源,而不必象Win16 API那樣依賴于那樣依賴于MS-DOS系統服務。然而,系統服務。然而,Win32不是簡單的由不是簡單的由Win16從從16位到位到32位的升位的升級,更重要的在于它支持:級,更重要的在于它支持: n(1)高性能的搶先式多任務和多線程;)高性能的搶先式多任務和多線程;n(2)連續的)連續的32位地址空間和先進的內存管理;位地址空間和先進的內存管理;n(3)對所有的可為進程

20、共享的對象,解決了它)對所有的可為進程共享的對象,解決了它的安全性問題;的安全性問題;n(4)內存映射文件;)內存映射文件; 12.4.1 搶先式多任務和多線程搶先式多任務和多線程nWindows是一個多任務操作系統,它提供了一是一個多任務操作系統,它提供了一次運行多個應用程序的能力。次運行多個應用程序的能力。n Windows 3.x的多任務是一種由協作、軟件方的多任務是一種由協作、軟件方式產生的有限的非搶先式的多任務。式產生的有限的非搶先式的多任務。n Windows 95的多任務是一種搶先式多任務。的多任務是一種搶先式多任務。在搶先式多任務操作系統中,系統在運行的所在搶先式多任務操作系統

21、中,系統在運行的所有進程之間對有進程之間對CPU時間進行共享,從而保證每時間進行共享,從而保證每個進程都能頻繁的訪問處理器,并且實現指令個進程都能頻繁的訪問處理器,并且實現指令的連續執行。這樣,每個的連續執行。這樣,每個Win32進程都需要分進程都需要分配一個優先級,系統調度程序利用這種優先級配一個優先級,系統調度程序利用這種優先級來決定哪一時刻來決定哪一時刻 。一個線程處于以下三種狀態之一:正在執行,掛一個線程處于以下三種狀態之一:正在執行,掛起 , 準 備 運 行 。 在 單 處 理 器 環 境 下 ( 如起 , 準 備 運 行 。 在 單 處 理 器 環 境 下 ( 如Windows 9

22、5),),同一時刻只能運行一個線程。同一時刻只能運行一個線程。為了在為了在Win32中支持多線程進程結構,中支持多線程進程結構,Win32在原在原來來Win16基礎上增加了:基礎上增加了:(1)對進程以及線程創建、操縱的支持;)對進程以及線程創建、操縱的支持;(2)對一個進程內線程之間的同步和同步對象的)對一個進程內線程之間的同步和同步對象的支持;支持;(3)一個統一的共享機制。)一個統一的共享機制。返回本節12.4.2 連續的地址空間和先進的內存管理連續的地址空間和先進的內存管理n(1)申請一塊可移動的內存塊。)申請一塊可移動的內存塊。 n(2)鎖定該內存塊。因為)鎖定該內存塊。因為Wind

23、ows引入了虛擬引入了虛擬內存管理,可以把內存塊移動到硬盤交換文件內存管理,可以把內存塊移動到硬盤交換文件中,所以在使用內存塊之前,必須將它鎖定在中,所以在使用內存塊之前,必須將它鎖定在真正的內存真正的內存RAM之中,也就是告訴操作系統,之中,也就是告訴操作系統,現在這塊內存暫時由應用程序來管理。現在這塊內存暫時由應用程序來管理。 n(3)對該內存塊進行各種操作:如復制數據到)對該內存塊進行各種操作:如復制數據到內存塊。內存塊。 n(4)解鎖內存,應用程序將對該內存的控制交)解鎖內存,應用程序將對該內存的控制交予予Windows。 下面給出一個程序片段,來說明內存管理函數的用法。下面給出一個程

24、序片段,來說明內存管理函數的用法。HGLOBAL memHandle;/內存句柄內存句柄char far* lpMem;/假設長度為假設長度為memLenmemHandle=GlobalAlloc(GHND,memLen+1);/申請內存塊,此申請內存塊,此處未做返回結果檢查,處未做返回結果檢查,/事實上,申請內存有時會失敗事實上,申請內存有時會失敗memcpy(lpMem,string,textLen);/拷貝數據,其中拷貝數據,其中string為為一字符串變量,一字符串變量,textLen/是這個字符串的長度是這個字符串的長度GlobalUnlock(memHandle);/解鎖內存解鎖內

25、存.GlobalFree(HGLOBAL) memHandle);/釋放內存釋放內存返回本節12.4.3 內存映射文件內存映射文件n內存映射文件是由一個文件到一塊內存的映射。內存映射文件是由一個文件到一塊內存的映射。Win32提供了允許應用程序把文件映射到一個提供了允許應用程序把文件映射到一個進程的函數(進程的函數(CreateFileMapping)。)。這樣,文這樣,文件內的數據就可以用內存讀件內的數據就可以用內存讀/寫指令來訪問,而寫指令來訪問,而不是用不是用ReadFile和和WriteFile這樣這樣的的I/O系統函數,系統函數,從而提高了文件存取速度。從而提高了文件存取速度。n這種

26、函數最適用于需要讀取文件并且對文件內這種函數最適用于需要讀取文件并且對文件內包含的信息做語法分析的應用程序,如對輸入包含的信息做語法分析的應用程序,如對輸入文件進行語法分析的彩色語法編輯器,編譯器文件進行語法分析的彩色語法編輯器,編譯器等。等。 返回本節12.4.4 Win32s:Windows 3.x對對Win32 API的支持的支持nWin32s與與Win32是有區別的。是有區別的。Win32s的的s的含的含義是指子集(義是指子集(subset)。)。 n運行在運行在Windows 3.x/Win32s系統上的系統上的Win32程程序支持序支持32位指針和位指針和32位寄存器,只需要在系統

27、位寄存器,只需要在系統調用之前稍作形式替換。調用之前稍作形式替換。 nWin32s子集同子集同Win32相比,不支持多線程,高相比,不支持多線程,高級圖形級圖形API,異步文件異步文件I/O,Unicode和安全性;和安全性;而且它是運行于而且它是運行于16位的位的Windows系統上的。但系統上的。但是同是同Win16相比,有它的優越之處,目前在相比,有它的優越之處,目前在16位位Windows程序開發方面有相當的潛力。程序開發方面有相當的潛力。 返回本節12.4.5 Win32編程基礎編程基礎nWin32數據類型數據類型n這里的數據類型指的是一些關鍵字,這些關鍵字定義了這里的數據類型指的是

28、一些關鍵字,這些關鍵字定義了Win32中的函數中的有關參數和返回值的大小和意義。中的函數中的有關參數和返回值的大小和意義。n這里需要解釋一下的是句柄。句柄是這里需要解釋一下的是句柄。句柄是Windows編程的一編程的一個關鍵性的概念,編寫個關鍵性的概念,編寫Windows應用程序總是要和各種應用程序總是要和各種句柄打交道。所謂句柄,就是一個惟一的數,用以標識句柄打交道。所謂句柄,就是一個惟一的數,用以標識許多不同的對象類型,如窗口、菜單、內存、畫筆、畫許多不同的對象類型,如窗口、菜單、內存、畫筆、畫刷和電話線路等。刷和電話線路等。n由于由于Windows是一個多任務操作系統,它可以同時運行是一

29、個多任務操作系統,它可以同時運行多個程序或一個程序的多個副本。多個程序或一個程序的多個副本。n Windows不僅使用句柄來管理實例,也用它來管理窗不僅使用句柄來管理實例,也用它來管理窗口、位圖、字體、元文件和圖標等系統資源。口、位圖、字體、元文件和圖標等系統資源。Win32常用的數據類型有:常用的數據類型有: 返回本節12.5 MFC編程編程n12.5.1 MFC類庫概念和組成類庫概念和組成n12.5.2 MFC應用程序框架應用程序框架n12.5.3 MFC的優點的優點n12.5.4 MFC對消息的管理對消息的管理返回首頁12.5.1 MFC類庫概念和組成類庫概念和組成n類庫是一個可以在應用

30、中使用的相互關聯的類庫是一個可以在應用中使用的相互關聯的C+類的集合。類的集合。n Microsoft提供了一個基礎類庫提供了一個基礎類庫MFC,其中包含其中包含用來開發用來開發C+和和C+ Windows應用程序的一組應用程序的一組類。基礎類庫的核心是以類。基礎類庫的核心是以C+形式封裝了大部分形式封裝了大部分的的Windows API。類庫表示窗口、對話框、設類庫表示窗口、對話框、設備上下文、公共備上下文、公共GDI對象如畫筆、調色板、控制對象如畫筆、調色板、控制框和其他標準的框和其他標準的Windows部件。這些類提供了部件。這些類提供了一個面向一個面向Windows中結構的簡單的中結構

31、的簡單的C+成員函成員函數的接口。數的接口。MFC可分為兩個主要部分:可分為兩個主要部分: n基礎類;基礎類;n宏和全程函數。宏和全程函數。 基礎類;基礎類;nMFC中的類按功能來分可劃分為以下幾類:中的類按功能來分可劃分為以下幾類:n基類、應用程序框架類、應用程序類、命令相基類、應用程序框架類、應用程序類、命令相關類、文檔關類、文檔/視圖類、線程類、可視對象類、窗視圖類、線程類、可視對象類、窗口類、視圖類、對話框類、屬性表口類、視圖類、對話框類、屬性表 、控制類、控制類、菜單類、設備描述表、繪畫對象類、通用類、菜單類、設備描述表、繪畫對象類、通用類、文件、診斷、異常、收集、模板收集、其他支文

32、件、診斷、異常、收集、模板收集、其他支持類、持類、OLE2類、類、OLE基類、基類、OLE可視編輯包裝可視編輯包裝程序類、程序類、OLE 可視編輯服務器程序類、可視編輯服務器程序類、OLE數數據傳輸類、據傳輸類、OLE對話框類、其他對話框類、其他OLE類和數據類和數據庫類。庫類。宏和全程函數。宏和全程函數。 nMicrosoft基本宏和全程函數提供以下功能:基本宏和全程函數提供以下功能:數據類型、運行時刻對象類型服務、診斷服務、數據類型、運行時刻對象類型服務、診斷服務、異常處理、異常處理、CString格式化及信息框顯示、消息格式化及信息框顯示、消息映射、應用消息和管理、對象連接和嵌入映射、應

33、用消息和管理、對象連接和嵌入(OLE)服務、標準命令和服務、標準命令和Windows IDs。約定:全程函數以約定:全程函數以“Afx”為前綴,所有全程變量為前綴,所有全程變量都是以都是以“Afx”為前綴,宏不帶任何特別前綴,為前綴,宏不帶任何特別前綴,但是全部大寫。但是全部大寫。n例例12-1:CObject類的定義。類的定義。 / class CObject is the root of all compliant objectsclass CObjectpublic:/ Object model (types, destruction, allocation)virtual CRunti

34、meClass* GetRuntimeClass() const;virtual CObject(); / virtual destructors are necessary/ Diagnostic allocationsvoid* PASCAL operator new(size_t nSize);void* PASCAL operator new(size_t, void* p);void PASCAL operator delete(void* p);#if defined(_DEBUG) & !defined(_AFX_NO_DEBUG_CRT)/ for file name/

35、line number tracking using DEBUG_NEWvoid* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);#endif/ Disable the copy constructor and assignment by default so you will get/ compiler errors instead of unexpected behaviour if you pass objects/ by value or assign tected:CObjec

36、t();private:CObject(const CObject& objectSrc); / no implementationvoid operator=(const CObject& objectSrc); / no implementation/ Attributespublic:BOOL IsSerializable() const;BOOL IsKindOf(const CRuntimeClass* pClass) const;/ Overridablesvirtual void Serialize(CArchive& ar);/ Diagnostic S

37、upportvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;/ Implementationpublic:static const AFX_DATA CRuntimeClass classCObject;#ifdef _AFXDLLstatic CRuntimeClass* PASCAL _GetBaseClass();#endif;CObject類為派生類提供了下述服務:類為派生類提供了下述服務: n(1)對象診斷。)對象診斷。n(2)運行時訪問類的信息。)運行時訪問類的信息。 n(

38、3)對象持續性。)對象持續性。 n下面舉個具體的例子來說明下面舉個具體的例子來說明MFC所提供的應用程序框架,程序如例所提供的應用程序框架,程序如例12-2所示。所示。n例例12-2:應用程序框架示例。應用程序框架示例。 #include/derived an application classclass CMinMFCApp:public CWinApppublic:BOOL InitInstance();/Derive the main window classclass CMainWindow:public CFrameWndpublic:CMainWindow();DECLARE_ME

39、SSAGE_MAP();BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)END_MESSAGE_MAP()/*CMinMFCApp Member Functions*/BOOL CMinMFCApp:InitInstance()m_pMainWnd=new CMainWindow();m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow(); return TRUE;/*CMainWindow member functions*/CMainWindow:CMainWindow()/constructo

40、rCreate(NULL,Min MFC Application,WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);/*an instance of type CMinMFCApp*/CMinMFCApp ThisApp;返回本節12.5.2 MFC應用程序框架應用程序框架nMFC AppWizard生成的應用程序包含以下要素。生成的應用程序包含以下要素。 n(1)WinMain()函數。函數。Windows要求應用程序必須有要求應用程序必須有一個一個WinMain()函數。函數。 n(2)應用程序類)應用程序類CMyFirstApp。該類的每一個對象代該類

41、的每一個對象代表一個應用程序。表一個應用程序。 n(3)應用程序啟動。)應用程序啟動。 n(4)成員函數)成員函數CMyFirstApp:InitInstance()。 n(5)成員函數)成員函數CWinApp:Run()。n (6)CMainFrame類。類。 n(7)文檔與視圖類。)文檔與視圖類。n (8)關閉應用程序。)關閉應用程序。 返回本節12.5.3 MFC的優點的優點nMicrosoft MFC具有以下不同于其他類庫的優勢:具有以下不同于其他類庫的優勢:n完全支持完全支持Windows所有的函數、控件、消息、所有的函數、控件、消息、GDI基本圖形函數、菜單及對話框。基本圖形函數、

42、菜單及對話框。n使用與傳統的使用與傳統的Windows API同樣的命名規則,同樣的命名規則,即匈牙利命名法。即匈牙利命名法。n進行消息處理時,不使用易產生錯誤的進行消息處理時,不使用易產生錯誤的switch/case語句,所有消息映射到類的成員函語句,所有消息映射到類的成員函數,這種直接消息到方法的映射對所有的消息數,這種直接消息到方法的映射對所有的消息都適用。都適用。 返回本節12.5.4 MFC對消息的管理對消息的管理n1MFC對消息的處理對消息的處理n2消息的發送消息的發送1MFC對消息的處理對消息的處理nMFC不使用用不使用用C語言編寫語言編寫Windows程序時用的程序時用的易產生

43、錯誤的易產生錯誤的switch/case語句,而采用一種消語句,而采用一種消息映射機制來決定如何處理特定的消息。這種息映射機制來決定如何處理特定的消息。這種消息映射機制包括一組宏,用于標識消息處理消息映射機制包括一組宏,用于標識消息處理函數、映射類成員函數和對應的消息等。函數、映射類成員函數和對應的消息等。 n例例12-3:消息處理函數例子。消息處理函數例子。 class CMainFrame:CFrameWndpublic:CMainFrame();protected:/AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnEditCopy();afx_msg void OnClose();/AFX_MSGDEC

溫馨提示

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

評論

0/150

提交評論