環(huán)境下Windows程序開發(fā)概述.ppt_第1頁
環(huán)境下Windows程序開發(fā)概述.ppt_第2頁
環(huán)境下Windows程序開發(fā)概述.ppt_第3頁
環(huán)境下Windows程序開發(fā)概述.ppt_第4頁
環(huán)境下Windows程序開發(fā)概述.ppt_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第12章 Visual C+環(huán)境下Windows程序開發(fā)概述,12.1 Visual C+可視化集成開發(fā)環(huán)境 12.2 創(chuàng)建、組織文件、工程和工作區(qū) 12.3 Windows編程基礎 12.4 Win32開發(fā) 12.5 MFC編程,12.1 Visual C+可視化集成開發(fā)環(huán)境,12.1.1 Visual C+簡介 12.1.2 項目開發(fā)過程 12.1.3 集成開發(fā)環(huán)境Developer Studio 12.1.4 常用功能鍵及其意義,返回首頁,12.1.1 Visual C+簡介,1Visual C+集成開發(fā)環(huán)境(IDE) 集成開發(fā)環(huán)境(IDE)是一個將程序編輯器、編譯器、調試工具和其他建立應用程序的工具集成在一起的用于開發(fā)應用程序的軟件系統(tǒng)。 2向導(Wizard) 向導是一個通過一步步的幫助引導你工作的工具。Developer Studio中包含三個向導 。 3MFC庫 庫(library)是可以重復使用的源代碼和目標代碼的集合。MFC(Microsoft Fundamental Classes)是Visual C+開發(fā)環(huán)境所帶的類庫,在該類庫中提供了大量的類,可以幫助開發(fā)人員快速建立應用程序。,返回本節(jié),12.1.2 項目開發(fā)過程,一個用C+開發(fā)項目的通用開發(fā)過程如圖12-1所示。,建立一個項目的第一步是利用編輯器建立程序代碼文件,包括頭文件、代碼文件、資源文件等。然后,啟動編譯程序,編譯程序首先調用預處理程序處理程序中的預處理命令(如#include,#define等),經過預處理程序處理的代碼將作為編譯程序的輸入。編譯對用戶程序進行詞法和語法分析,建立目標文件,文件中包括機器代碼、連接指令、外部引用以及從該源文件中產生的函數和數據名。此后,連接程序將所有的目標代碼和用到的靜態(tài)連接庫的代碼連接起來,為所有的外部變量和函數找到其提供地點,最后產生一個可執(zhí)行文件。一般有一個makefile文件來協(xié)調各個部分產生可執(zhí)行文件。,返回本節(jié),12.1.3 集成開發(fā)環(huán)境Developer Studio,1進入Developer Studio 2Developer Studio的界面 3獲得幫助信息 4Visual C+的編輯器,圖12-2 Developer Studio界面,Developer Studio它具有以下特點:,(1)自動語法。 (2)自動縮進。 (3)參數幫助。 (4)集成的關鍵字幫助。 (5)拖放編輯。 (6)自動錯誤定位。,返回本節(jié),12.1.4 常用功能鍵及其意義,表12-1 常用功能鍵,返回本節(jié),12.2 創(chuàng)建、組織文件、工程和工作區(qū),12.2.1 新建工程 12.2.2 新建工作區(qū) 12.2.3 增加已有文件到工程中 12.2.4 打開工作區(qū) 12.2.5 設置當前工程,返回首頁,12.2.1 新建工程,項目工作區(qū)是一個包含用戶的所有相關項目和配置的實體。工程定義為一個配置和一組文件,用以生成最終的程序或二進制文件。一個項目工作區(qū)可以包含多個工程,這些工程既可以是同一類型的工程,也可以是不同類型的工程(如Visual C+和Visual J+工程)。工作區(qū)現在以.dsw為后綴名(以前為.mdp),項目文件現在以.dsp(以前為.mak)為后綴名。項目工作區(qū)如圖12-3所示。,圖12-3 項目工作區(qū),要新建一個工程,可以: (1)在File菜單上,單擊New,選擇Projects標簽。 (2)從列表中選擇項目類型 (3)單擊Create New Workspace(新建工作區(qū))或Add to Current Workspace(加入到當前工作區(qū)中)。 (4)要使新工程為子工程,可以選擇Dependency of 檢查框,并從列表中選擇一個工程。,(5)在Project Name框中,輸入新工程名,確保該名字必須與工作區(qū)中的別的工程名字不重名。 (6)在Location框中,指定工程存放的目錄:可以直接輸入路徑名,也可以單擊旁邊的Browse按鈕,瀏覽選擇一個路徑。 (7)單擊Platform框中的相應檢查框,指定工程的開發(fā)平臺,返回本節(jié),12.2.2 新建工作區(qū),要創(chuàng)建一個空的工作區(qū),可以: (1)在File菜單上,單擊New。 (2)在隨后彈出的對話框上,單擊Workspace標簽。 (3)從類型列表中選擇Blank Workspace。 (4)在Workspace Name框中輸入名字,注意名字不能與它將要包含的工程同名。 (5)在Location框中指定存放工作區(qū)文件的目錄。 (6)單擊OK。,返回本節(jié),12.2.3 增加已有文件到工程中,(1)打開包含目標工程的項目工作區(qū)文件。 (2)在Project菜單上,單擊Add to Project,然后單擊Files。 (3)在Insert Files into Project對話框中,瀏覽并定位要加入到工程中的文件名,然后選擇它們。 (4)從Insert Into中選擇工程名字,然后單擊OK。,返回本節(jié),12.2.4 打開工作區(qū),選擇File-Open Workspace,指定要打開的工作區(qū);或選擇File-Recent Workspaces ,從最近打開過的工作區(qū)列表中選擇一個。,返回本節(jié),12.2.5 設置當前工程,選擇Project Setting,可以為當前工程設置編譯、鏈接和C/C+等各種選項。,返回本節(jié),12.3 Windows編程基礎,12.3.1 Windows API 12.3.2 Windows基礎 12.3.3 Windows消息映射和處理,返回首頁,12.3.1 Windows API,1Windows API的定義 Windows API是應用程序編程接口(Application Programming Interface)的英文縮寫。它是大量函數加上數字常量、宏、結構、類型以及其他相關項的集合。 2Windows API函數的分類 根據Windows API函數的功能,可以將其分為三類: (1)窗口管理函數。用以實現窗口的創(chuàng)建、移動和修改功能。 (2)圖形設備(GUI)函數。用以實現與設備無關的圖形操作功能。 (3)系統(tǒng)服務函數。用以實現與操作系統(tǒng)有關的多種功能。,返回本節(jié),12.3.2 Windows基礎,1事件 事件以如下三種方式產生: (1)通過輸入設備,如鍵盤和鼠標。 (2)通過屏幕上的可視對象,如菜單、工具欄按鈕、滾動條和對話框上的控件。 (3)來自Windows內部。 2消息 但Windows捕獲一個事件后,它會編寫一條消息,并將相關信息放入一個數據結構中,然后將包含此數據結構的消息發(fā)送給需要此消息的程序。Windows消息是在Windows文件中用宏定義的常數。消息常數名通常以WM開頭,格式為WM_XXX。,3繪圖及設備環(huán)境 Windows具有圖形用戶界面(GUI),它包括菜單、工具欄、滾動條和對話框中的按鈕等元素。 4對象與句柄 對設備環(huán)境的訪問是通過Windows返回的句柄進行的。 5坐標系 要為繪制和其他任務指定位置,需要坐標系統(tǒng)。Windows提供了8種不同的坐標系。,返回本節(jié),12.3.3 Windows消息映射和處理,開始執(zhí)行 在Windows中,管理消息的方式通常是這樣的:當發(fā)生某個消息后,該消息進入消息隊列,操作系統(tǒng)根據消息提供的信息決定由哪個應用程序來處理,該應用程序依照一定的方式查找應用程序各個類的消息映射(一組宏,這些宏用來確定某個消息及相應的處理程序的對應關系),找到處理程序,然后由處理程序執(zhí)行。圖12-4是Windows程序和Windows消息的基本流程。,圖12-4 Windows程序和Windows消息處理的基本流程,Windows程序要處理的消息種類如下:,(1)Windows消息。該類消息以WM_開頭(WM_COMMAND例外),通常由窗口和視圖來處理。 (2)由控件和其他子窗口發(fā)送給父窗口的WM_COMMAND消息。這些消息中包括EN_CHANGE通知碼。 (3)來自于用戶界面對象的WM_COMMAND消息。這些用戶界面對象包括菜單、工具欄按鈕和快捷鍵。,返回本節(jié),12.4 Win32開發(fā),12.4.1 搶先式多任務和多線程 12.4.2 連續(xù)的地址空間和先進的內存管理 12.4.3 內存映射文件 12.4.4 Win32s:Windows 3.x對Win32 API的支持 12.4.5 Win32編程基礎,返回首頁,Win32可以應用于特定的操作系統(tǒng),這種系統(tǒng)可以直接控制和處理PC硬件資源,而不必象Win16 API那樣依賴于MS-DOS系統(tǒng)服務。然而,Win32不是簡單的由Win16從16位到32位的升級,更重要的在于它支持: (1)高性能的搶先式多任務和多線程; (2)連續(xù)的32位地址空間和先進的內存管理; (3)對所有的可為進程共享的對象,解決了它的安全性問題; (4)內存映射文件;,12.4.1 搶先式多任務和多線程,Windows是一個多任務操作系統(tǒng),它提供了一次運行多個應用程序的能力。 Windows 3.x的多任務是一種由協(xié)作、軟件方式產生的有限的非搶先式的多任務。 Windows 95的多任務是一種搶先式多任務。在搶先式多任務操作系統(tǒng)中,系統(tǒng)在運行的所有進程之間對CPU時間進行共享,從而保證每個進程都能頻繁的訪問處理器,并且實現指令的連續(xù)執(zhí)行。這樣,每個Win32進程都需要分配一個優(yōu)先級,系統(tǒng)調度程序利用這種優(yōu)先級來決定哪一時刻 。,一個線程處于以下三種狀態(tài)之一:正在執(zhí)行,掛起,準備運行。在單處理器環(huán)境下(如Windows 95),同一時刻只能運行一個線程。 為了在Win32中支持多線程進程結構,Win32在原來Win16基礎上增加了: (1)對進程以及線程創(chuàng)建、操縱的支持; (2)對一個進程內線程之間的同步和同步對象的支持; (3)一個統(tǒng)一的共享機制。,返回本節(jié),12.4.2 連續(xù)的地址空間和先進的內存管理,(1)申請一塊可移動的內存塊。 (2)鎖定該內存塊。因為Windows引入了虛擬內存管理,可以把內存塊移動到硬盤交換文件中,所以在使用內存塊之前,必須將它鎖定在真正的內存RAM之中,也就是告訴操作系統(tǒng),現在這塊內存暫時由應用程序來管理。 (3)對該內存塊進行各種操作:如復制數據到內存塊。 (4)解鎖內存,應用程序將對該內存的控制交予Windows。,下面給出一個程序片段,來說明內存管理函數的用法。 HGLOBAL memHandle;/內存句柄 char far* lpMem;/假設長度為memLen memHandle=GlobalAlloc(GHND,memLen+1);/申請內存塊,此處未做返回結果檢查, /事實上,申請內存有時會失敗 memcpy(lpMem,string,textLen);/拷貝數據,其中string為一字符串變量,textLen /是這個字符串的長度 GlobalUnlock(memHandle);/解鎖內存 . GlobalFree(HGLOBAL) memHandle);/釋放內存,返回本節(jié),12.4.3 內存映射文件,內存映射文件是由一個文件到一塊內存的映射。Win32提供了允許應用程序把文件映射到一個進程的函數(CreateFileMapping)。這樣,文件內的數據就可以用內存讀/寫指令來訪問,而不是用ReadFile和WriteFile這樣的I/O系統(tǒng)函數,從而提高了文件存取速度。 這種函數最適用于需要讀取文件并且對文件內包含的信息做語法分析的應用程序,如對輸入文件進行語法分析的彩色語法編輯器,編譯器等。,返回本節(jié),12.4.4 Win32s:Windows 3.x對Win32 API的支持,Win32s與Win32是有區(qū)別的。Win32s的s的含義是指子集(subset)。 運行在Windows 3.x/Win32s系統(tǒng)上的Win32程序支持32位指針和32位寄存器,只需要在系統(tǒng)調用之前稍作形式替換。 Win32s子集同Win32相比,不支持多線程,高級圖形API,異步文件I/O,Unicode和安全性;而且它是運行于16位的Windows系統(tǒng)上的。但是同Win16相比,有它的優(yōu)越之處,目前在16位Windows程序開發(fā)方面有相當的潛力。,返回本節(jié),12.4.5 Win32編程基礎,Win32數據類型 這里的數據類型指的是一些關鍵字,這些關鍵字定義了Win32中的函數中的有關參數和返回值的大小和意義。 這里需要解釋一下的是句柄。句柄是Windows編程的一個關鍵性的概念,編寫Windows應用程序總是要和各種句柄打交道。所謂句柄,就是一個惟一的數,用以標識許多不同的對象類型,如窗口、菜單、內存、畫筆、畫刷和電話線路等。 由于Windows是一個多任務操作系統(tǒng),它可以同時運行多個程序或一個程序的多個副本。 Windows不僅使用句柄來管理實例,也用它來管理窗口、位圖、字體、元文件和圖標等系統(tǒng)資源。,Win32常用的數據類型有:,返回本節(jié),12.5 MFC編程,12.5.1 MFC類庫概念和組成 12.5.2 MFC應用程序框架 12.5.3 MFC的優(yōu)點 12.5.4 MFC對消息的管理,返回首頁,12.5.1 MFC類庫概念和組成,類庫是一個可以在應用中使用的相互關聯(lián)的C+類的集合。 Microsoft提供了一個基礎類庫MFC,其中包含用來開發(fā)C+和C+ Windows應用程序的一組類?;A類庫的核心是以C+形式封裝了大部分的Windows API。類庫表示窗口、對話框、設備上下文、公共GDI對象如畫筆、調色板、控制框和其他標準的Windows部件。這些類提供了一個面向Windows中結構的簡單的C+成員函數的接口。,MFC可分為兩個主要部分:,基礎類; 宏和全程函數。,基礎類;,MFC中的類按功能來分可劃分為以下幾類: 基類、應用程序框架類、應用程序類、命令相關類、文檔/視圖類、線程類、可視對象類、窗口類、視圖類、對話框類、屬性表 、控制類、菜單類、設備描述表、繪畫對象類、通用類、文件、診斷、異常、收集、模板收集、其他支持類、OLE2類、OLE基類、OLE可視編輯包裝程序類、OLE 可視編輯服務器程序類、OLE數據傳輸類、OLE對話框類、其他OLE類和數據庫類。,宏和全程函數。,Microsoft基本宏和全程函數提供以下功能: 數據類型、運行時刻對象類型服務、診斷服務、異常處理、CString格式化及信息框顯示、消息映射、應用消息和管理、對象連接和嵌入(OLE)服務、標準命令和Windows IDs。 約定:全程函數以“Afx”為前綴,所有全程變量都是以“Afx”為前綴,宏不帶任何特別前綴,但是全部大寫。,例12-1:CObject類的定義。 / class CObject is the root of all compliant objects class CObject public: / Object model (types, destruction, allocation) virtual CRuntimeClass* GetRuntimeClass() const; virtual CObject(); / virtual destructors are necessary / Diagnostic allocations void* PASCAL operator new(size_t nSize); void* PASCAL operator new(size_t, void* p); void PASCAL operator delete(void* p); #if defined(_DEBUG) #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 objects. protected: CObject(); private: CObject(const CObject / no implementation / Attributes,public: BOOL IsSerializable() const; BOOL IsKindOf(const CRuntimeClass* pClass) const; / Overridables virtual void Serialize(CArchive,CObject類為派生類提供了下述服務:,(1)對象診斷。 (2)運行時訪問類的信息。 (3)對象持續(xù)性。,下面舉個具體的例子來說明MFC所提供的應用程序框架,程序如例12-2所示。 例12-2:應用程序框架示例。 #include /derived an application class class CMinMFCApp:public CWinApp public: BOOL InitInstance(); ; /Derive the main window class class CMainWindow:public CFrameWnd ,public: CMainWindow(); DECLARE_MESSAGE_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()/constructor Create(NULL, “Min MFC Application“, WS_OVERLAPPEDWINDOW, rectDefault, NULL, NULL); /*an instance of type CMinMFCApp*/ CMinMFCApp ThisApp;,返回本節(jié),12.5.2 MFC應用程序框架,MFC AppWizard生成的應用程序包含以下要素。 (1)WinMain()函數。Windows要求應用程序必須有一個WinMain()函數。 (2)應用程序類CMyFirstApp。該類的每一個對象代表一個應用程序。 (3)應用程序啟動。 (4)成員函數CMyFirstApp:InitInstance()。 (5)成員函數CWinApp:Run()。 (6)CMainFrame類。 (7)文檔與視圖類。 (8)關閉應用程序。,返回本節(jié),12.5.3 MFC的優(yōu)點,Microsoft MFC具有以下不同于其他類庫的優(yōu)勢: 完全支持Windows所有的函數、控件、消息、GDI基本圖形函數、菜單及對話框。 使用與傳統(tǒng)的Windows API同樣的命名規(guī)則,即匈牙利命名法。 進行消息處理時,不使用易產生錯誤的switch/case語句,所有消息映射到類的成員函數,這種直接消息到方法的映射對所有的消息都適用。,返回本節(jié),12.5.4 MFC對消息的管理,1MFC對消息的處理 2消息的發(fā)送,1MFC對消息的處理,MFC不使用用C語言編寫Windows程序時用的易產生錯誤的switch/case語句,而采用一種消息映射機制來決定如何處理特定的消息。這種消息映射機制包括一組宏,用于標識消息處理函數、映射類成員函數和對應的消息等。,例12-3:消息處理函數例子。 class CMainFrame:CFrameWnd public: CMainFrame(); protected: /AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnEditCopy(); afx_msg void OnClose(); /AFX_MSG DECLARE_MESSAGE_MAP() ;,例12-4:使用用戶自定義消息。 #include #define CM_APPLE (WM_USER+0) #define CM_ORANGE (WM_USER+1) class CMainFrame:CFrameWnd public: CMainFrame(); protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnClose(); /handle user s

溫馨提示

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

評論

0/150

提交評論