版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第3章章Windows編程與MFCMFC應(yīng)用程序執(zhí)行的大致流程;應(yīng)用程序執(zhí)行的大致流程;MFC的概念和作用;的概念和作用;Windows應(yīng)用程序的特點和運行機制;應(yīng)用程序的特點和運行機制;消息的概念,機制;消息的概念,機制;利用利用MFC AppWizard 來創(chuàng)立來創(chuàng)立Windows應(yīng)用程序應(yīng)用程序的步驟和方法;的步驟和方法;創(chuàng)立應(yīng)用程序中所產(chǎn)生的主要類及其功能、組成文創(chuàng)立應(yīng)用程序中所產(chǎn)生的主要類及其功能、組成文件和程序的框架結(jié)構(gòu);件和程序的框架結(jié)構(gòu);第第3章章Windows編程與MFC系統(tǒng)特點系統(tǒng)特點 Windows操作系統(tǒng)是由操作系統(tǒng)是由Microsoft公司推出公司推出的基于個人電腦
2、的圖形操作系統(tǒng)。其有以下幾個的基于個人電腦的圖形操作系統(tǒng)。其有以下幾個特點:特點:1、標準的圖形用戶界面,如窗口、菜單、按鈕和、標準的圖形用戶界面,如窗口、菜單、按鈕和列表框等。列表框等。2、應(yīng)用程序與硬件無關(guān)的特性,對于同一類硬件,、應(yīng)用程序與硬件無關(guān)的特性,對于同一類硬件,不管廠家和型號程序都無需進行如何修改就可以不管廠家和型號程序都無需進行如何修改就可以運行。運行。3、所有的、所有的Windows應(yīng)用程序都是消息驅(qū)動機制,應(yīng)用程序都是消息驅(qū)動機制,也就是說,也就是說,Winsows程序是通過操作系統(tǒng)發(fā)送程序是通過操作系統(tǒng)發(fā)送 的消息來處理用戶輸入的。的消息來處理用戶輸入的。第第3章章Wi
3、ndows編程與MFC事件與消息的概念事件與消息的概念 在在Windows操作系統(tǒng)中,無論是操作系統(tǒng)中,無論是系統(tǒng)產(chǎn)生的動作或是用戶在運行應(yīng)用程序系統(tǒng)產(chǎn)生的動作或是用戶在運行應(yīng)用程序中發(fā)出的操作動作都稱為事件中發(fā)出的操作動作都稱為事件Events,而消息而消息Message用于描述某個事件發(fā)用于描述某個事件發(fā)生的信息。事件和消息密切相關(guān),事件是生的信息。事件和消息密切相關(guān),事件是因,消息是果,事件產(chǎn)生消息,消息對應(yīng)因,消息是果,事件產(chǎn)生消息,消息對應(yīng)事件。所謂消息的響應(yīng),其實質(zhì)就是事件事件。所謂消息的響應(yīng),其實質(zhì)就是事件的響應(yīng)。例如:按下鼠標左鍵,系統(tǒng)就會的響應(yīng)。例如:按下鼠標左鍵,系統(tǒng)就會產(chǎn)
4、生一條特定的消息,標志鼠標按鍵事件產(chǎn)生一條特定的消息,標志鼠標按鍵事件的發(fā)生。的發(fā)生。第第3章章Windows編程與MFCWindows應(yīng)用程序執(zhí)行的根本流程應(yīng)用程序執(zhí)行的根本流程圖圖3.1 Windows應(yīng)用程序的基本流程應(yīng)用程序的基本流程第第3章章Windows編程與MFC 圖中的圖中的WM_QUIT是消息值,表示應(yīng)用程序退出的是消息值,表示應(yīng)用程序退出的消息。消息。 在在Visual C+編程過程中,系統(tǒng)規(guī)定每一種消息編程過程中,系統(tǒng)規(guī)定每一種消息用一個特定的值表示,為了便于記憶,系統(tǒng)針對每一個用一個特定的值表示,為了便于記憶,系統(tǒng)針對每一個消息值消息值定義了對應(yīng)的符號常量,如定義了對應(yīng)
5、的符號常量,如WM_LBUTTONDOWN表示鼠標左鍵按下的消息,表示鼠標左鍵按下的消息,WM_LBUTTONUP表示鼠標左肩抬起的消息,表示鼠標左肩抬起的消息,WM_SIZE表示改變窗口尺寸的消息表示改變窗口尺寸的消息第第3章章Windows編程與MFC在應(yīng)用程序運行中,消息是最重要的通信手段,在編程過程在應(yīng)用程序運行中,消息是最重要的通信手段,在編程過程 中,中,Windows中的每一個消息中所包括的所有信息用一個中的每一個消息中所包括的所有信息用一個MSG結(jié)結(jié)構(gòu)體來表示,構(gòu)體來表示,MSG結(jié)構(gòu)體的定義如下:結(jié)構(gòu)體的定義如下:typedef struct tagMSG HWND hwnd;
6、 /獲取消息的窗口句柄獲取消息的窗口句柄UINT message; /消息編號消息編號WPARAM wParam; /記錄消息附加信息的字參數(shù)記錄消息附加信息的字參數(shù)LPARAM lParam; /記錄消息附加信息的長字參數(shù)記錄消息附加信息的長字參數(shù)DWORD time; /消息被發(fā)送到消息隊列的時間消息被發(fā)送到消息隊列的時間POINT pt; /消息發(fā)送時的光標所在位置消息發(fā)送時的光標所在位置 MSG; 其中的其中的HWND、UINT、WPARAM、DWORD等都是在等都是在Visual C系統(tǒng)中針對系統(tǒng)中針對Windows編程所定義的擴充數(shù)據(jù)類型。編程所定義的擴充數(shù)據(jù)類型。第第3章章Win
7、dows編程與MFC需要說明的是:需要說明的是: 圖的流程是一個循環(huán)的流程;圖的流程是一個循環(huán)的流程;Windows所能向應(yīng)用程序發(fā)送所能向應(yīng)用程序發(fā)送的消息多達數(shù)百種,但是對于一般的應(yīng)用程序來說,只有其中的一的消息多達數(shù)百種,但是對于一般的應(yīng)用程序來說,只有其中的一局部有意義。局部有意義。如:如果應(yīng)用程序中需要用鼠標來操作,那么如:如果應(yīng)用程序中需要用鼠標來操作,那么WM_KEYUP、WM_KEYDOWN和和WM_CHAR等消息就沒有如何意義,因為這些等消息就沒有如何意義,因為這些消息都是與按鍵有關(guān)的消息,也就是說,應(yīng)用程序不需要處理這些消息都是與按鍵有關(guān)的消息,也就是說,應(yīng)用程序不需要處理
8、這些消息,對于這些消息,只需要交給消息,對于這些消息,只需要交給Windows作默認的處理即可。作默認的處理即可。因此,在應(yīng)用程序中所處理的消息只是所有消息中的一小局部。因此,在應(yīng)用程序中所處理的消息只是所有消息中的一小局部。第第3章章Windows編程與MFCWindows應(yīng)用程序?qū)嶋H上是由一系列的消息處理代碼來實現(xiàn)應(yīng)用程序?qū)嶋H上是由一系列的消息處理代碼來實現(xiàn)的。這和我們傳統(tǒng)的過程式編程方法很不一樣,我們只能預測用戶的。這和我們傳統(tǒng)的過程式編程方法很不一樣,我們只能預測用戶所利用的程序用戶界面對象所進行的操作以及為這些操作編寫處理所利用的程序用戶界面對象所進行的操作以及為這些操作編寫處理代碼
9、,卻不可預測這些操作在什么時候發(fā)生或是什么順序來發(fā)生,代碼,卻不可預測這些操作在什么時候發(fā)生或是什么順序來發(fā)生,所以說,我們不可能知道什么消息會在什么時候以什么順序來臨。所以說,我們不可能知道什么消息會在什么時候以什么順序來臨。Windows應(yīng)用程序在處理消息時使用了一種叫做回調(diào)函數(shù)應(yīng)用程序在處理消息時使用了一種叫做回調(diào)函數(shù)callback function的特殊函數(shù)?;卣{(diào)函數(shù)由應(yīng)用程序定義,但的特殊函數(shù)。回調(diào)函數(shù)由應(yīng)用程序定義,但是,在應(yīng)用程序中并沒有調(diào)用回調(diào)函數(shù)的代碼,回調(diào)函數(shù)是供操作是,在應(yīng)用程序中并沒有調(diào)用回調(diào)函數(shù)的代碼,回調(diào)函數(shù)是供操作系統(tǒng)或者其子系統(tǒng)調(diào)用的,這種調(diào)用通常發(fā)生在某一事
10、件發(fā)生時系統(tǒng)或者其子系統(tǒng)調(diào)用的,這種調(diào)用通常發(fā)生在某一事件發(fā)生時.典典型的回調(diào)函數(shù)有窗口過程、對話框過程或構(gòu)造函數(shù)。如:窗口過程型的回調(diào)函數(shù)有窗口過程、對話框過程或構(gòu)造函數(shù)。如:窗口過程函數(shù)的原型如下:函數(shù)的原型如下:LRESULT CALLBACK WindowProc (HWND hwnd,/窗口句柄窗口句柄unit uMsg,/消息標識消息標識WPARAM wParam,/包含信息內(nèi)容的參數(shù)包含信息內(nèi)容的參數(shù)LPARAM lParam/包含消息內(nèi)容的參數(shù)包含消息內(nèi)容的參數(shù));第第3章章Windows編程與MFC編程中常用的數(shù)據(jù)類型和句柄編程中常用的數(shù)據(jù)類型和句柄數(shù)據(jù)類型數(shù)據(jù)類型 Visu
11、al C+編程過程中,經(jīng)常會遇到一些編程過程中,經(jīng)常會遇到一些Visual C的擴充的擴充數(shù)據(jù)類型,大多數(shù)是在原有數(shù)據(jù)類型,大多數(shù)是在原有C根本類型的根底上定義了新的便根本類型的根底上定義了新的便于記憶的名稱,而有些是新擴充的數(shù)據(jù)類型。如:于記憶的名稱,而有些是新擴充的數(shù)據(jù)類型。如:Windows中所用的數(shù)據(jù)類型中所用的數(shù)據(jù)類型對應(yīng)的基本數(shù)據(jù)類型對應(yīng)的基本數(shù)據(jù)類型說明說明BOOLInt布爾值FLOATFloat浮點數(shù)LPTSTRChar *指向字符串的32位指針第第3章章Windows編程與MFC編程中常用的句柄編程中常用的句柄 在在Windows中,對象可以是所有的標準的部件,如窗口、菜單中
12、,對象可以是所有的標準的部件,如窗口、菜單欄、工具欄、按鈕和編輯框等。當然我們自己編寫的程序也可稱為欄、工具欄、按鈕和編輯框等。當然我們自己編寫的程序也可稱為對象。對象。 句柄句柄Handle是是Windows編程中的一個重要的概念。句柄編程中的一個重要的概念。句柄是一個是一個4字節(jié)長的整數(shù)值,是應(yīng)用程序中不同對象的編號,每個對字節(jié)長的整數(shù)值,是應(yīng)用程序中不同對象的編號,每個對象的句柄是唯一的。應(yīng)用程序通過句柄來訪問相應(yīng)的對象。如:象的句柄是唯一的。應(yīng)用程序通過句柄來訪問相應(yīng)的對象。如:句柄類型句柄類型說明說明HBRUSH畫刷句柄HFONT字體句柄HMENU菜單句柄第第3章章Windows編程
13、與MFC每個對象除了句柄外,另外還有一個識別碼每個對象除了句柄外,另外還有一個識別碼ID,它也是一,它也是一個個4字節(jié)長的整數(shù)值,可以看作是對象的名字,但是句柄和字節(jié)長的整數(shù)值,可以看作是對象的名字,但是句柄和Id的區(qū)的區(qū)別主要有以下幾個方面:別主要有以下幾個方面:1、句柄是系統(tǒng)內(nèi)給定的,而、句柄是系統(tǒng)內(nèi)給定的,而ID是用戶自行定義的。是用戶自行定義的。2、句柄是創(chuàng)立窗口時得到的,而、句柄是創(chuàng)立窗口時得到的,而ID是程序編寫時確定的。是程序編寫時確定的。3、句柄具有唯一性,而、句柄具有唯一性,而ID可以重復。可以重復。第第3章章Windows編程與MFC利用利用MFC AppWizard 創(chuàng)立
14、創(chuàng)立Windows應(yīng)用程序應(yīng)用程序簡介簡介Windows SDK:Windows Software Development Kit Windows 軟件開發(fā)工具包軟件開發(fā)工具包Windows API:Windows Application Programming Interface Windows應(yīng)用程序接口應(yīng)用程序接口MFC :Microsoft Foundation Class微軟根底類庫微軟根底類庫第第3章章Windows編程與MFCWindows SDK和和Windows API緊密聯(lián)系,是一套幫助緊密聯(lián)系,是一套幫助C語語言程序員創(chuàng)立言程序員創(chuàng)立Windows應(yīng)用程序的工具,它包含:
15、應(yīng)用程序的工具,它包含:1、Windows編程中可能用到的函數(shù)、消息、結(jié)構(gòu)體、宏及其他資編程中可能用到的函數(shù)、消息、結(jié)構(gòu)體、宏及其他資 源的幫助信息。源的幫助信息。2、各種編程工具,如對話框編輯器、圖像編輯器等。、各種編程工具,如對話框編輯器、圖像編輯器等。3、Windows庫及頭文件。庫及頭文件。4、使用、使用C語言編寫的例如程序。語言編寫的例如程序。 Windows SDK的最新版本是的最新版本是Win32 SDK,當我們在安裝,當我們在安裝Visual C系統(tǒng)時,它會被自動安裝上。系統(tǒng)時,它會被自動安裝上。基于基于API設(shè)計設(shè)計Windows應(yīng)用程序時,程序開發(fā)者需要直接調(diào)應(yīng)用程序時,程
16、序開發(fā)者需要直接調(diào)用用API函數(shù),必須編寫大量代碼,并且要熟知函數(shù),必須編寫大量代碼,并且要熟知Windows應(yīng)用程序的應(yīng)用程序的框架,因此,程序開發(fā)難度高而且開發(fā)周期長。但是,采用這種方框架,因此,程序開發(fā)難度高而且開發(fā)周期長。但是,采用這種方法編寫程序可以使應(yīng)用程序獲得更高的效率,編寫程序時有較大的法編寫程序可以使應(yīng)用程序獲得更高的效率,編寫程序時有較大的自由度。自由度。第第3章章Windows編程與MFC簡介簡介編寫編寫Windows應(yīng)用程序,可采用兩種方法:應(yīng)用程序,可采用兩種方法:1、直接使用、直接使用Windows SDK軟件開發(fā)包調(diào)用軟件開發(fā)包調(diào)用Windows API應(yīng)應(yīng)用程序
17、接口函數(shù)的編程方法;用程序接口函數(shù)的編程方法;2、基于、基于MFC微軟根底類庫的程序設(shè)計方法。微軟根底類庫的程序設(shè)計方法。 MFC是是Microsoft公司推出的用于創(chuàng)立公司推出的用于創(chuàng)立Windows應(yīng)用程序的一應(yīng)用程序的一套套C類庫。類庫。MFC按照按照C類的層次形式組織在一起,幾個層次類的層次形式組織在一起,幾個層次較高的類提供一般的功能,而此次較低的類去實現(xiàn)更具體的功能。較高的類提供一般的功能,而此次較低的類去實現(xiàn)更具體的功能。每個低層次的類都是從高層類中派生出來的,因此繼承了高層次的每個低層次的類都是從高層類中派生出來的,因此繼承了高層次的行為。在行為。在MFC類庫中封裝了大多數(shù)的類
18、庫中封裝了大多數(shù)的Windows API函數(shù),取而代函數(shù),取而代之的是對程序員更友好的之的是對程序員更友好的C類,很多類,很多Windows程序所共有的標程序所共有的標準內(nèi)容可以有準內(nèi)容可以有MFC的類來提供。如窗口、按鈕等標準部件都有相應(yīng)的類來提供。如窗口、按鈕等標準部件都有相應(yīng)的類,程序中用到這些標準部件時,直接使用即可。因此,使用的類,程序中用到這些標準部件時,直接使用即可。因此,使用MFC編程程序員可以把注意力集中于自己的程序所特有的局部,不編程程序員可以把注意力集中于自己的程序所特有的局部,不需要事事親自來編。大大減少了程序代碼的編寫量,是編程變得更需要事事親自來編。大大減少了程序代
19、碼的編寫量,是編程變得更容易輕松。容易輕松。第第3章章Windows編程與MFC需要說明的:需要說明的:MFC還提供了一個應(yīng)用程序開發(fā)模型,即文檔還提供了一個應(yīng)用程序開發(fā)模型,即文檔/視圖模型視圖模型DOC / View,是將應(yīng)用程序數(shù)據(jù)與用戶界面元素別離的一種應(yīng),是將應(yīng)用程序數(shù)據(jù)與用戶界面元素別離的一種應(yīng)用編程方法。它允許這兩局部程序獨立存在,這樣,程序員在更改用編程方法。它允許這兩局部程序獨立存在,這樣,程序員在更改其中一局部程序的時候,不會大量更改另一局部程序。其中一局部程序的時候,不會大量更改另一局部程序。Visual C應(yīng)用程序開發(fā)環(huán)境特別適合于使用應(yīng)用程序開發(fā)環(huán)境特別適合于使用MF
20、C。第第3章章Windows編程與MFC利用利用MFC AppWizard創(chuàng)立創(chuàng)立Windows應(yīng)用程序應(yīng)用程序MFC AppWizard:應(yīng)用程序向?qū)В簯?yīng)用程序向?qū)?在在Visual C下可創(chuàng)立各種類型的應(yīng)用程序,而不同的應(yīng)用下可創(chuàng)立各種類型的應(yīng)用程序,而不同的應(yīng)用程序具有不同的應(yīng)用程序框架,為方便用戶生成和利用這些框架,程序具有不同的應(yīng)用程序框架,為方便用戶生成和利用這些框架,提供了提供了MFC AppWizard,它可以幫助用戶自動生成一些常用的標,它可以幫助用戶自動生成一些常用的標準程序結(jié)構(gòu)框架。準程序結(jié)構(gòu)框架。如:基于如:基于MFC的的Windows應(yīng)用程序結(jié)構(gòu)、應(yīng)用程序結(jié)構(gòu)、DLL
21、應(yīng)用程序結(jié)構(gòu)、單應(yīng)用程序結(jié)構(gòu)、單文檔文檔SDI應(yīng)用程序結(jié)構(gòu)和多文檔應(yīng)用程序結(jié)構(gòu)和多文檔MDI應(yīng)用程序結(jié)構(gòu)等。在應(yīng)用程序結(jié)構(gòu)等。在這些程序框架中,最常用的是開發(fā)基于這些程序框架中,最常用的是開發(fā)基于MFC的一般應(yīng)用程序的一般應(yīng)用程序MFC AppWizardexe。第第3章章Windows編程與MFC創(chuàng)立一個單文檔應(yīng)用程序創(chuàng)立一個單文檔應(yīng)用程序開始開始選擇選擇“File“New,選擇,選擇Projects標簽;選擇標簽;選擇MFC AppWizard(exe)的工程類型的工程類型(該類型用于創(chuàng)立可執(zhí)行的該類型用于創(chuàng)立可執(zhí)行的Windows應(yīng)用程序應(yīng)用程序),將工程工作文件夾定位在,將工程工作文件
22、夾定位在“程序,并在程序,并在“Project Name框中輸入工程名框中輸入工程名Ex_SDIHello,如圖,單擊,如圖,單擊OK。圖圖4.5 MFC AppWizard的的“New”對話框?qū)υ捒蚴褂檬褂肕FC AppWizard第一步第一步從應(yīng)用程序類型從應(yīng)用程序類型Single Document、Multiple Document和和Dialog Based中選擇中選擇SDI。決定應(yīng)用程序中是否需要決定應(yīng)用程序中是否需要MFC的的“文檔文檔/視圖結(jié)構(gòu)的支持。假設(shè)不視圖結(jié)構(gòu)的支持。假設(shè)不選定此項,那么程序中的磁盤文件的翻開、保存以及文檔和視圖的相選定此項,那么程序中的磁盤文件的翻開、保存
23、以及文檔和視圖的相互作用等功能需要用戶來實現(xiàn),且將跳過互作用等功能需要用戶來實現(xiàn),且將跳過Step 2Step 5,直接彈出,直接彈出“Step 6對話框。對話框。選擇資源所使用的語言,這里是選擇資源所使用的語言,這里是“中文中文中國中國,單擊,單擊Next按鈕。按鈕。圖圖4.6 SDI的的“Step 1”對話框?qū)υ捒蚴褂檬褂肕FC AppWizard第二步第二步單擊Next按鈕進入下一步。 第三步第三步單擊Next按鈕進入下一步。 圖圖4.7 SDI的的“Step 2”對話框?qū)υ捒驁D圖4.8 SDI的的“Step 3”對話框?qū)υ捒蚴褂檬褂肕FC AppWizard第四步第四步單擊Next按鈕
24、進入下一步。 使用使用MFC AppWizard第五步第五步在彈出的對話框在彈出的對話框(如圖如圖)中出現(xiàn)三個方面的選項,供用戶來選擇中出現(xiàn)三個方面的選項,供用戶來選擇: 應(yīng)用程序的主窗口是應(yīng)用程序的主窗口是MFC標準風格還是窗口左邊有切分窗口的瀏覽標準風格還是窗口左邊有切分窗口的瀏覽器風格;器風格;在源文件中是否參加注釋用來引導用戶編寫程序代碼;在源文件中是否參加注釋用來引導用戶編寫程序代碼;使用動態(tài)鏈接庫還是靜態(tài)鏈接庫。使用動態(tài)鏈接庫還是靜態(tài)鏈接庫。保存缺省狀態(tài),單擊保存缺省狀態(tài),單擊Next按鈕進行下一步。按鈕進行下一步。圖圖 SDI的的“Step 5”對話框?qū)υ捒蚴褂檬褂肕FC App
25、Wizard第六步第六步單擊單擊Finish按鈕出現(xiàn)如下圖的對話框按鈕出現(xiàn)如下圖的對話框 圖圖 SDI的的“Step 6”對話框?qū)υ捒驁D圖 項目信息對話框項目信息對話框使用使用MFC AppWizard編譯并運行編譯并運行圖圖4.13 應(yīng)用程序運行結(jié)果應(yīng)用程序運行結(jié)果菜單欄工具欄狀態(tài)欄標題欄文檔窗口第第3章章Windows編程與MFC應(yīng)用程序的類和文件應(yīng)用程序的類和文件類說明類說明 剛剛建立的應(yīng)用程序中,雖然這個程序什么也不能做,但它已剛剛建立的應(yīng)用程序中,雖然這個程序什么也不能做,但它已經(jīng)具備了經(jīng)具備了Windows應(yīng)用程序應(yīng)用程序 的根本特征、功能和框架。我們將對的根本特征、功能和框架。我
26、們將對AppWizard自動生成的應(yīng)用程序框架進行分析,以加深對自動生成的應(yīng)用程序框架進行分析,以加深對Windows應(yīng)用程序設(shè)計的理解。應(yīng)用程序設(shè)計的理解。AppWizard在生成應(yīng)用程序時共派生了在生成應(yīng)用程序時共派生了5個類:個類:CAboutDlg:“關(guān)于對話框的對話框類關(guān)于對話框的對話框類CMainFrame:主框架窗口類主框架窗口類CMyExpApp:應(yīng)用程序類:應(yīng)用程序類CMyExpDoc:文檔類:文檔類CMyExpView:視圖類:視圖類第第3章章Windows編程與MFCCAboutDlg:“關(guān)于對話框的對話框類關(guān)于對話框的對話框類 CAboutDlg是工程的對話框類,它是由
27、是工程的對話框類,它是由MFC類庫中的類庫中的Cdialog類派生出來的,關(guān)于對話框的內(nèi)容將在以后的章節(jié)中詳細介紹到。類派生出來的,關(guān)于對話框的內(nèi)容將在以后的章節(jié)中詳細介紹到。CMainFrame:主框架窗口類主框架窗口類 CMainFrame是工程的主框架窗口類,他的基類是是工程的主框架窗口類,他的基類是CFrameWnd,頭文件為,實現(xiàn)文件。,頭文件為,實現(xiàn)文件。 主框架窗口類用于管理主程序的窗口,并用來顯示窗口的標題主框架窗口類用于管理主程序的窗口,并用來顯示窗口的標題欄、工具欄和狀態(tài)欄等,同時它還處理對窗口操作的消息,如窗口欄、工具欄和狀態(tài)欄等,同時它還處理對窗口操作的消息,如窗口最大
28、化、最小化以及改變窗口大小等一般操作。最大化、最小化以及改變窗口大小等一般操作。CMyExpApp:應(yīng)用程序類:應(yīng)用程序類CMyExpApp是工程的應(yīng)用程序類,他的基類是是工程的應(yīng)用程序類,他的基類是CWinApp,頭文件為,頭文件為,實現(xiàn)文件為。,實現(xiàn)文件為。 應(yīng)用程序類管理程序的整體以控制應(yīng)用程序的所有對象,包括應(yīng)用程序類管理程序的整體以控制應(yīng)用程序的所有對象,包括文檔、視圖和邊框窗口,并完成應(yīng)用程序的初始化工作和程序退出文檔、視圖和邊框窗口,并完成應(yīng)用程序的初始化工作和程序退出時的去除工作。時的去除工作。第第3章章Windows編程與MFCCMyExpDoc:文檔類:文檔類 CMyExp
29、Doc負責存放程序的數(shù)據(jù)并讀取磁盤文件數(shù)據(jù),或?qū)⒇撠煷娣懦绦虻臄?shù)據(jù)并讀取磁盤文件數(shù)據(jù),或?qū)⒋疟P文件數(shù)據(jù)寫入磁盤文件中。文檔類必須通過視圖類實現(xiàn)與用戶磁盤文件數(shù)據(jù)寫入磁盤文件中。文檔類必須通過視圖類實現(xiàn)與用戶的交互。的交互。CMyExpView:視圖類:視圖類 CMyExpView主要負責管理視圖窗口并顯示文檔類中的數(shù)據(jù),主要負責管理視圖窗口并顯示文檔類中的數(shù)據(jù),其內(nèi)容可以顯示在屏幕上,也可以輸出到打印機或其他設(shè)備上。它其內(nèi)容可以顯示在屏幕上,也可以輸出到打印機或其他設(shè)備上。它也負責處理用戶數(shù)據(jù),同時接受用戶對數(shù)據(jù)的鼠標、鍵盤操作并傳也負責處理用戶數(shù)據(jù),同時接受用戶對數(shù)據(jù)的鼠標、鍵盤操作并傳給文
30、檔類對象。給文檔類對象。第第3章章Windows編程與MFC文件說明文件說明 AppWizard在自動生成應(yīng)用程序框架時,除了生成剛剛介紹在自動生成應(yīng)用程序框架時,除了生成剛剛介紹的各個類的頭文件和實現(xiàn)文件外,還生成了一些為建立應(yīng)用程序所的各個類的頭文件和實現(xiàn)文件外,還生成了一些為建立應(yīng)用程序所需要的其他文件。這些文件可以在應(yīng)用程序生成時指定的路徑中找需要的其他文件。這些文件可以在應(yīng)用程序生成時指定的路徑中找到。到。第第3章章Windows編程與MFC文件說明:文件說明:1、:類向?qū)?、:類向?qū)lassWizard的信息存儲文件,存儲由的信息存儲文件,存儲由ClassWizard編輯編輯已有的
31、類或添加新類的信息和由已有的類或添加新類的信息和由ClassWizard建立和編輯各種消息建立和編輯各種消息處理函數(shù)和映射變量等的信息。處理函數(shù)和映射變量等的信息。2、MyExp.dsp: Project文件,即工程文件。文件,即工程文件。Project文件中保存這一文件中保存這一個工程的各種信息,用于在翻開工程時使用。一個工程文件對應(yīng)一個工程的各種信息,用于在翻開工程時使用。一個工程文件對應(yīng)一個工程應(yīng)用程序。個工程應(yīng)用程序。3、MyExp.dsw:Workspace文件,即工作空間文件。一個文件,即工作空間文件。一個Workspace文件可包含一個或多個工程。該文件存儲這一個工作空文件可包含
32、一個或多個工程。該文件存儲這一個工作空間的組成情況如包含哪些程序工程、程序工程的依賴關(guān)系等,間的組成情況如包含哪些程序工程、程序工程的依賴關(guān)系等,用于存儲和翻開一個工作空間。用于存儲和翻開一個工作空間。4、MyExp.rc:資源定義文件,包含了程序資源的定義,其中保存了應(yīng)資源定義文件,包含了程序資源的定義,其中保存了應(yīng)用程序中使用到的各種資源信息,包括存儲在文件夾中的圖標、位用程序中使用到的各種資源信息,包括存儲在文件夾中的圖標、位圖和光標等。圖和光標等。5、Resource.h:標準的頭文件,它包含了所有資源標準的頭文件,它包含了所有資源ID號的定義,與文號的定義,與文件相對應(yīng)。件相對應(yīng)。第
33、第3章章Windows編程與MFC6、StdAfx.h:包含在所有包含在所有AppWizard程序中的標準頭文件,用于生成程序中的標準頭文件,用于生成預編譯信息。預編譯信息。7、:包含在所有、:包含在所有AppWizard程序中,它包含所有標準程序中,它包含所有標準include文件。文件。8、resMyExpDoc.ico:文件中包含了翻開文檔時所用的圖標文件。文件中包含了翻開文檔時所用的圖標文件。9、:資源定義文件,包含了用不能直接編輯的資源。它可以將所有不、:資源定義文件,包含了用不能直接編輯的資源。它可以將所有不能由資源編輯器編輯的資源防治到這個文件中。能由資源編輯器編輯的資源防治到這
34、個文件中。10、應(yīng)用程序的圖標文件。它包含在資源文件中。、應(yīng)用程序的圖標文件。它包含在資源文件中。11、resToolbar.bmp:用于創(chuàng)立工具欄按鈕的位圖文件。初時工具用于創(chuàng)立工具欄按鈕的位圖文件。初時工具欄和狀態(tài)欄是在主邊框窗口類中構(gòu)造的。欄和狀態(tài)欄是在主邊框窗口類中構(gòu)造的。12、:包含了對所有該程序文件的解釋信息,并說明了所有創(chuàng)立的類、:包含了對所有該程序文件的解釋信息,并說明了所有創(chuàng)立的類。第第3章章Windows編程與MFC事件驅(qū)動的程序設(shè)計事件驅(qū)動的程序設(shè)計 所有的所有的Windows應(yīng)用程序都是由消息驅(qū)動的應(yīng)用程序都是由消息驅(qū)動的message-driven或事件驅(qū)動,這也是或
35、事件驅(qū)動,這也是Windows編程方式與其它編程編程方式與其它編程方式最大的區(qū)別。方式最大的區(qū)別。事件驅(qū)動的程序設(shè)計方式是指,應(yīng)用程序在屏幕上繪制幾個界事件驅(qū)動的程序設(shè)計方式是指,應(yīng)用程序在屏幕上繪制幾個界面對象,如按鈕、文本框和菜單等。應(yīng)用程序通常通過一段稱為事面對象,如按鈕、文本框和菜單等。應(yīng)用程序通常通過一段稱為事件循環(huán)的代碼來響應(yīng)用戶的操作。用戶可以使用鼠標或鍵盤來任意件循環(huán)的代碼來響應(yīng)用戶的操作。用戶可以使用鼠標或鍵盤來任意操作屏幕上的對象。當用戶用鼠標單擊一個按鈕就成為一個事件。操作屏幕上的對象。當用戶用鼠標單擊一個按鈕就成為一個事件。事件驅(qū)動系統(tǒng)把用戶的動作如鼠標單擊和鍵盤操作定
36、義為事件,也事件驅(qū)動系統(tǒng)把用戶的動作如鼠標單擊和鍵盤操作定義為事件,也把系統(tǒng)操作入更新屏幕定義為事件。也就是說,用戶對以窗口形式把系統(tǒng)操作入更新屏幕定義為事件。也就是說,用戶對以窗口形式顯示的數(shù)據(jù)進行操作。每一個不同的操作對于顯示的數(shù)據(jù)進行操作。每一個不同的操作對于Windows程序來說程序來說,都相當于發(fā)生了某個事件。對英語每個不同的事件,都相當于發(fā)生了某個事件。對英語每個不同的事件,Windows傳送不同的消息給不同的類的對象。每個不同類的對象不同的消息傳送不同的消息給不同的類的對象。每個不同類的對象不同的消息都會調(diào)用不同的處理函數(shù)執(zhí)行有關(guān)處理,并把處理結(jié)果通過窗口界都會調(diào)用不同的處理函數(shù)
37、執(zhí)行有關(guān)處理,并把處理結(jié)果通過窗口界面向用戶顯示。如此循環(huán)往復,最終完成用戶需要完成的工作。面向用戶顯示。如此循環(huán)往復,最終完成用戶需要完成的工作。第第3章章Windows編程與MFC標準的標準的Windows消息消息所有以所有以WM_為前綴的消息為前綴的消息WM_COMMAND消息除外都消息除外都是標準的是標準的Windows消息,包括鍵盤消息、鼠標消息和窗口消息。消息,包括鍵盤消息、鼠標消息和窗口消息。他們一般由窗口對象和視圖對象進行處理。窗口對象指的是從他們一般由窗口對象和視圖對象進行處理。窗口對象指的是從CWnd類中派生出的類的對象,如從類中派生出的類的對象,如從CWnd、CFrame
38、Wnd、CMDIFrameWnd、CMDIChildWnd、Cview和和Cdialog等等MFC類或這些類的派生類中定義的對象。類或這些類的派生類中定義的對象。第第3章章Windows編程與MFC1、鍵盤消息、鍵盤消息在程序運行過程中,當用戶對鍵盤進行操作時,會產(chǎn)生對應(yīng)的消在程序運行過程中,當用戶對鍵盤進行操作時,會產(chǎn)生對應(yīng)的消息,系統(tǒng)將把此消息發(fā)送給對應(yīng)的窗口。息,系統(tǒng)將把此消息發(fā)送給對應(yīng)的窗口。如當鍵盤的某個鍵被按下時將產(chǎn)生如當鍵盤的某個鍵被按下時將產(chǎn)生WM_CHAR消息,這個消息帶消息,這個消息帶有字符代碼值、重復赤松和先前狀態(tài)碼有字符代碼值、重復赤松和先前狀態(tài)碼3個參數(shù)。個參數(shù)。WM
39、_CHAR消息的處消息的處理函數(shù)為理函數(shù)為OnChar,此函數(shù)的原型為:,此函數(shù)的原型為:afx_msg void onChar(UINT nChar,UINT nRepCnt,UINT nFlags);其中:其中:nChar是所按鍵的字符代碼值。是所按鍵的字符代碼值。nRepCnt是重復的次數(shù),它表示用戶按鍵時重復擊鍵的次數(shù)。是重復的次數(shù),它表示用戶按鍵時重復擊鍵的次數(shù)。nFlags表示掃描碼、先前鍵狀態(tài)和鍵轉(zhuǎn)換狀態(tài)等,其參數(shù)值如圖表示掃描碼、先前鍵狀態(tài)和鍵轉(zhuǎn)換狀態(tài)等,其參數(shù)值如圖位位含義含義015指明鍵重復按下的次數(shù)1623指定掃描碼24如果同時按下擴展鍵(Alt),則為1,反之為0252
40、8由Windows內(nèi)部使用第第3章章Windows編程與MFC鍵盤消息的類型有以下幾種:鍵盤消息的類型有以下幾種:1、WM_KEYDOWN:表示某一鍵被按下。:表示某一鍵被按下。2、WM_KEYUP:表示某一鍵彈起。:表示某一鍵彈起。3、WM_CHAR:表示某一鍵被按下且彈起,輸入了一個字符。:表示某一鍵被按下且彈起,輸入了一個字符。與這些消息相應(yīng)的消息處理函數(shù)的原型分別為:與這些消息相應(yīng)的消息處理函數(shù)的原型分別為:afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);afx_msg void OnKeyUp(UINT nCha
41、r,UINT nRepCnt,UINT nFlags);afx_msg void onChar(UINT nChar,UINT nRepCnt,UINT nFlags);第第3章章Windows編程與MFC2、鼠標消息、鼠標消息在在Windows中處理鼠標操作的方法根本上有以下中處理鼠標操作的方法根本上有以下3種:種:1單擊單擊Click:表示按一下鼠標:表示按一下鼠標 的左鍵或右鍵,然后釋放。的左鍵或右鍵,然后釋放。2雙擊雙擊Double Click:表示快速連續(xù)按兩下鼠標左鍵。:表示快速連續(xù)按兩下鼠標左鍵。3拖動拖動Drag:指按住鼠標的按鍵后,再移動鼠標。:指按住鼠標的按鍵后,再移動鼠標
42、。消息類型:消息類型:WM_MOUSEMOVE:鼠標移動:鼠標移動WM_LBUTTONDOWN:按下鼠標左鍵:按下鼠標左鍵WM_MBUTTONDOWN:按下鼠標中間鍵:按下鼠標中間鍵WM_RBUTTONDOWN:按下數(shù)百右鍵:按下數(shù)百右鍵所有這些鼠標消息的處理函數(shù)都有相似的原型,且都有兩個參數(shù)。所有這些鼠標消息的處理函數(shù)都有相似的原型,且都有兩個參數(shù)。如:處理鼠標左鍵按下的消息函數(shù)如:處理鼠標左鍵按下的消息函數(shù)OnLButtonDown:Afx_msg void OnLbuttonDown (UINT nFlags,Cpoint point);Point 是鼠標事件發(fā)生時光標的位置,是鼠標事件
43、發(fā)生時光標的位置,nFlags表示某些鍵的狀態(tài)。表示某些鍵的狀態(tài)。第第3章章Windows編程與MFC3、控件消息、控件消息控件是一個小的子窗口,它隸屬于其他窗口如對話框等,控件是一個小的子窗口,它隸屬于其他窗口如對話框等,能接受操作并向父窗口發(fā)送消息。常見的控件有按鈕、列表框、編能接受操作并向父窗口發(fā)送消息。常見的控件有按鈕、列表框、編輯框、符合框和滾動條等。輯框、符合框和滾動條等??丶⒎譃閮深悾嚎丶⒎譃閮深悾?從控件傳給消息,通常這類消息的前綴的最后一個字符從控件傳給消息,通常這類消息的前綴的最后一個字符 為為N。2由系統(tǒng)發(fā)送給控件的消息,這類消息的前綴的最后一個由系統(tǒng)發(fā)送給控件的
44、消息,這類消息的前綴的最后一個 字符為字符為M。 與其他標準的與其他標準的Windows消息一樣,空間消息也是由窗口對象消息一樣,空間消息也是由窗口對象和視圖對象對其進行處理的。和視圖對象對其進行處理的。第第3章章Windows編程與MFC4、命令消息、命令消息命令消息主要包括由用戶界面對象發(fā)送的命令消息主要包括由用戶界面對象發(fā)送的WM_COMMAND消消息,用戶界面對象是指菜單、工具欄和快捷鍵等。它和控件消息的息,用戶界面對象是指菜單、工具欄和快捷鍵等。它和控件消息的區(qū)別在于:控件消息只能由特定控件向區(qū)別在于:控件消息只能由特定控件向Windows系統(tǒng)傳送,而命系統(tǒng)傳送,而命令消息是由用戶界
45、面發(fā)送的,它可以被更多的對象處理。在文檔對令消息是由用戶界面發(fā)送的,它可以被更多的對象處理。在文檔對象、視圖對象、窗口對象以及空間對象中都能處理這種消息。象、視圖對象、窗口對象以及空間對象中都能處理這種消息。第第3章章Windows編程與MFC消息的發(fā)送和接收的根本過程和機制消息的發(fā)送和接收的根本過程和機制應(yīng)用程序進行了初始化后就會調(diào)用應(yīng)用程序進行了初始化后就會調(diào)用CWinApp的成員函數(shù)的成員函數(shù)Run開始每人的消息循環(huán)。開始每人的消息循環(huán)。Run函數(shù)的工作就是得到并函數(shù)的工作就是得到并發(fā)送發(fā)送Windows消息直到收到消息直到收到WM_QUIT消息。消息。Run函數(shù)首函數(shù)首先調(diào)用先調(diào)用Pr
46、eTranslateMessage成員函數(shù)進行某些特殊處理成員函數(shù)進行某些特殊處理,之后調(diào)用,之后調(diào)用Windows函數(shù)函數(shù)TranslateMessage做標準鍵盤翻譯做標準鍵盤翻譯,最后是,最后是DispatchMessage分發(fā)消息,并將消息發(fā)送到適分發(fā)消息,并將消息發(fā)送到適當?shù)拇翱?。當?shù)拇翱凇5诘?章章Windows編程與MFC消息的發(fā)送和接收的根本過程和機制消息的發(fā)送和接收的根本過程和機制消息循環(huán)對標準的消息循環(huán)對標準的Windows消息和控件消息的發(fā)送和接收比消息和控件消息的發(fā)送和接收比較直接。當消息循環(huán)接受到一條較直接。當消息循環(huán)接受到一條Windows消息或控件消息時,它消息或
47、控件消息時,它首先通過查詢一種內(nèi)部結(jié)構(gòu)來確定消息要發(fā)送的窗口,出口對應(yīng)的首先通過查詢一種內(nèi)部結(jié)構(gòu)來確定消息要發(fā)送的窗口,出口對應(yīng)的窗口類將對其進行處理。每個窗口對象都有自己的消息映射和處理窗口類將對其進行處理。每個窗口對象都有自己的消息映射和處理函數(shù)。函數(shù)。MFC的積累將檢測這一目標類是否在其消息中為這一消息提的積累將檢測這一目標類是否在其消息中為這一消息提供了處理函數(shù)入口。如果找到入口,那么消息被送往處理函數(shù),并供了處理函數(shù)入口。如果找到入口,那么消息被送往處理函數(shù),并結(jié)束消息發(fā)送過程;如果消息無對應(yīng)入口,那么對目標類進行積累結(jié)束消息發(fā)送過程;如果消息無對應(yīng)入口,那么對目標類進行積累消息映射
48、檢測,并沿著層次向上查找,知道找到入口函數(shù)為止。消息映射檢測,并沿著層次向上查找,知道找到入口函數(shù)為止。第第3章章Windows編程與MFC消息處理函數(shù)消息處理函數(shù) CCmdTarget類:由類:由Cobject類直接派生而生,它負責將消類直接派生而生,它負責將消息發(fā)送到能夠響應(yīng)這些消息的對象。它是所有能進行消息映射的息發(fā)送到能夠響應(yīng)這些消息的對象。它是所有能進行消息映射的MFC類的基類,如類的基類,如CWinThread、CWinApp、Cview等類的基類等類的基類。消息映射就是將消息或命令發(fā)送到程序員為處理消息所編寫的函。消息映射就是將消息或命令發(fā)送到程序員為處理消息所編寫的函數(shù)中,使其
49、對消息進行處理。所有的窗口類都是由數(shù)中,使其對消息進行處理。所有的窗口類都是由CCmdTarget派派生的,程序員只需處理那些感興趣的消息,而將其他消息交給高級生的,程序員只需處理那些感興趣的消息,而將其他消息交給高級的類處理。的類處理。 ClassWizard是一個功能非常強大的工具,我們可以用是一個功能非常強大的工具,我們可以用ClassWizard來創(chuàng)立新類、定義消息處理函數(shù)、覆蓋來創(chuàng)立新類、定義消息處理函數(shù)、覆蓋MFC的虛函數(shù)的虛函數(shù)以及從對話框、表單視圖或記錄視圖的控件中獲取數(shù)據(jù)。以及從對話框、表單視圖或記錄視圖的控件中獲取數(shù)據(jù)。本節(jié)中我們先介紹利用本節(jié)中我們先介紹利用ClassWi
50、zard管理窗口消息處理函數(shù)的管理窗口消息處理函數(shù)的方法和步驟,利用方法和步驟,利用ClassWizard管理控件消息處理函數(shù)和命令消息管理控件消息處理函數(shù)和命令消息處理函數(shù)的方法放到其他章節(jié)介紹。處理函數(shù)的方法放到其他章節(jié)介紹。第第3章章Windows編程與MFC消息和消息映射消息和消息映射消息分類消息分類Windows應(yīng)用程序中的消息主要有三種類型。u窗口消息窗口消息(Windows message)主要指由WM_開頭的消息,一般由窗口類和視圖類對象來處理。窗口消息往往帶有參數(shù),以標志處理消息的方法。u控件的通知消息控件的通知消息(Control notifications)當控件的狀態(tài)發(fā)
51、生改變時,控件就會向其父窗口發(fā)送WM_COMMAND通知消息。應(yīng)用程序框架處理控件消息的方法和窗口消息相同,但按鈕的BN_CLICKED通知消息除外,它的處理方法與命令消息相同。u命令消息命令消息(Command message)主要包括由用戶交互對象(菜單、工具條的按鈕、快捷鍵等)發(fā)送的WM_COMMAND通知消息。命令消息的處理方式與其他兩種消息不同,它能夠被多種對象接收、處理,這些對象包括文檔類、文檔模板類、應(yīng)用程序本身以及窗口和視類等;而窗口消息和控件的通知消息是由窗口對象接收并處理的,這里的窗口對象是指從CWnd中派生的類的對象,它包括CFrameWnd、CMDIFrameWnd、C
52、MDIChildWnd、CView、CDialog以及從這些類派生的對象等。 第第3章章Windows編程與MFC消息映射與消息處理函數(shù)消息映射與消息處理函數(shù)在在Visual C+中,用戶只需要編寫對于該消息發(fā)生響應(yīng)的函中,用戶只需要編寫對于該消息發(fā)生響應(yīng)的函數(shù),而數(shù),而Visual C+內(nèi)部將自動為用戶添加一個消息映射關(guān)系。通內(nèi)部將自動為用戶添加一個消息映射關(guān)系。通過消息映射,消息就和它的處理函數(shù)對應(yīng)起來。過消息映射,消息就和它的處理函數(shù)對應(yīng)起來。消息處理函數(shù)指的是與某個消息消息對應(yīng)的函數(shù)。消息處理函消息處理函數(shù)指的是與某個消息消息對應(yīng)的函數(shù)。消息處理函數(shù)的執(zhí)行是由其對應(yīng)的消息引發(fā)的,某個類
53、對象中的消息處理函數(shù)數(shù)的執(zhí)行是由其對應(yīng)的消息引發(fā)的,某個類對象中的消息處理函數(shù)是與這個類對象能夠得到的一個消息對應(yīng)的,當這個消息發(fā)生時,是與這個類對象能夠得到的一個消息對應(yīng)的,當這個消息發(fā)生時,這個函數(shù)就會被執(zhí)行。這個函數(shù)就會被執(zhí)行。消息處理函數(shù)的定義與使用方法與類的一般的成員函數(shù)不同。消息處理函數(shù)的定義與使用方法與類的一般的成員函數(shù)不同。一般成員函數(shù)包括兩局部:函數(shù)的定義局部和函數(shù)的實現(xiàn)局部。定一般成員函數(shù)包括兩局部:函數(shù)的定義局部和函數(shù)的實現(xiàn)局部。定義一個一般成員函數(shù)時,在類中定義函數(shù)的原型,在實現(xiàn)文件中書義一個一般成員函數(shù)時,在類中定義函數(shù)的原型,在實現(xiàn)文件中書寫函數(shù)的實現(xiàn)代碼。而消息處
54、理函數(shù)除了這兩局部以外還有消息映寫函數(shù)的實現(xiàn)代碼。而消息處理函數(shù)除了這兩局部以外還有消息映射局部,通過消息映射在消息處理函數(shù)和引發(fā)它的消息之間建立聯(lián)射局部,通過消息映射在消息處理函數(shù)和引發(fā)它的消息之間建立聯(lián)系。消息處理函數(shù)的定義方法與一般成員函數(shù)也不完全相同。系。消息處理函數(shù)的定義方法與一般成員函數(shù)也不完全相同。第第3章章Windows編程與MFC概述概述翻開翻開MFC的的ClassWizard的方法:的方法:選擇選擇“View“ClassWizard菜單或直接使用菜單或直接使用Ctrl+W快捷鍵快捷鍵。在源代碼文件的文檔編輯窗口中,右擊鼠標,選擇在源代碼文件的文檔編輯窗口中,右擊鼠標,選擇C
55、lassWizard命命令。令。當當ClassWizard翻開后,就會彈出如圖的翻開后,就會彈出如圖的MFC ClassWizard對話對話框??颉?圖圖 MFC ClassWiard對話框?qū)υ捒虻诘?章章Windows編程與MFC例如,向CEx_SDIHelloView中添加WM_LBUTTOMDOWN的消息映射,那么可按以下步驟進行:(1)按Ctrl+W快捷鍵翻開MFC ClassWizard對話框。(2)在Class name組合框中,將類名選定為CEx_SDIHelloView。(3)在Object IDs列表框中選定CEx_SDIHelloView,而在Messages列表中選定WM
56、_LBUTTOMDOWN消息。(4)雙擊Messages列表中的WM_LBUTTOMDOWN消息或單擊Add Function按鈕,都會在CEx_SDIHelloView類中添加該消息的映射函數(shù)OnLButtonDown,同時在Member funcions列表中顯示這一消息映射函數(shù)和被映射的消息,如圖。圖圖 映射映射WM_LBUTTONDOWN消息消息第第3章章Windows編程與MFC(5)單擊Edit Code,轉(zhuǎn)向文檔窗口,定位到OnLButtonDown源代碼處。(6)添加以下代碼:void CEx_SDIHelloView:OnLButtonDown(UINT nFlags, CP
57、oint point) / TODO: Add your message handler code here and/or call defaultMessageBox (你好,我的Visual C+世界!, 問候, 0) ;CView:OnLButtonDown(nFlags, point);(7)程序運行后,在窗口客戶區(qū)左擊,彈出一個消息對話框。第第3章章Windows編程與MFC類的添加和刪除類的添加和刪除用用MFC ClassWizard給工程添加一個類通常是按以下步驟進給工程添加一個類通常是按以下步驟進行的:行的:(1)按快捷鍵按快捷鍵Ctrl+W啟動啟動MFC ClassWizar
58、d對話框。單擊對話框。單擊Add Class,選擇,選擇New命令,如下圖的命令,如下圖的New Class對話框。對話框。圖圖 New Class對話框?qū)υ捒虻诘?章章Windows編程與MFC(2)對話框中,Name框是用來輸入用戶定義的類名,注意要以“C字母打頭,以保持與MFC標識符命名規(guī)那么一致;File Name是該類的源代碼文件名,單擊Change按鈕可改變源文件名稱及其在磁盤中的位置;Base class框用來指定該類的基類;Dialog ID框是中選擇CDialog作為基類時指定對話框的資源ID號。最下面的Automation是用來設(shè)置對自動化的支持。(3)單擊OK按鈕,一個新
59、類就會自動添加到工程中。而當添加的類需要刪除時,那么需要按以下步驟進行:(1)將翻開的所有文檔窗口關(guān)閉。(2)將工程工作區(qū)窗口切換到FileView頁面,展開Source Files和Header Files結(jié)點,分別選定要刪除類的對應(yīng).h和.cpp文件,按下Delete鍵,刪除這兩個文件。(3)選擇“File“Close Workspace菜單命令,關(guān)閉工程。(4)從實際的文件夾中刪除對應(yīng)的.h和.cpp文件與.clw文件。需要注意的是,當下一次翻開MFC ClassWizard對話框時,就會彈出Select Source Files對話框,這時只要單擊右下的Add All按鈕即可。第第3章
60、章Windows編程與MFC應(yīng)用程序的執(zhí)行過程分析應(yīng)用程序的執(zhí)行過程分析在前面我們建立了一個什么都沒有操作的在前面我們建立了一個什么都沒有操作的MFC應(yīng)用程序,雖然應(yīng)用程序,雖然它已經(jīng)能夠運行,但該程序又是從哪里執(zhí)行和從哪里得到控制的?它已經(jīng)能夠運行,但該程序又是從哪里執(zhí)行和從哪里得到控制的?一個一個MFC應(yīng)用程序的執(zhí)行過程可分為以下幾步:應(yīng)用程序的執(zhí)行過程可分為以下幾步:1、調(diào)用、調(diào)用CWinApp類的構(gòu)造函數(shù)類的構(gòu)造函數(shù)2、程序的入口函數(shù)、程序的入口函數(shù)WinMain得到程序控制得到程序控制3、在、在WinMain函數(shù)執(zhí)行的過程中調(diào)用程序類的函數(shù)執(zhí)行的過程中調(diào)用程序類的InitInstance 函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)客戶關(guān)系管理實施指南手冊
- 2025年企業(yè)內(nèi)部審計團隊建設(shè)與培養(yǎng)指南
- 非機動車停放管理規(guī)范制度
- 超市員工考勤及工資制度
- 超市商品分類及編碼制度
- 2026年西藏機場招聘19人備考題庫及參考答案詳解一套
- 養(yǎng)老院老人健康飲食營養(yǎng)師職業(yè)發(fā)展規(guī)劃制度
- 2026年陽江市紀委監(jiān)委公開選調(diào)公務(wù)員8人備考題庫及答案詳解一套
- 2026年蘇州市生物醫(yī)藥產(chǎn)業(yè)集團有限公司招聘備考題庫及1套完整答案詳解
- 咸安區(qū)2026年面向教育部直屬師范大學公費師范畢業(yè)生專項招聘備考題庫有答案詳解
- 北京市西城區(qū)第8中學2026屆生物高二上期末學業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 2026年遼寧輕工職業(yè)學院單招綜合素質(zhì)考試參考題庫帶答案解析
- 2026屆北京市清華大學附中數(shù)學高二上期末調(diào)研模擬試題含解析
- 醫(yī)院實習生安全培訓課課件
- 四川省成都市武侯區(qū)西川中學2024-2025學年八上期末數(shù)學試卷(解析版)
- 2026年《必背60題》抖音本地生活BD經(jīng)理高頻面試題包含詳細解答
- 《成人患者醫(yī)用粘膠相關(guān)性皮膚損傷的預防及護理》團體標準解讀2026
- 2025年國家公務(wù)員國家發(fā)展和改革委員會面試題及答案
- 企業(yè)法律法規(guī)培訓
- 肋骨骨折病歷討論課件
- 基于智能技術(shù)的設(shè)備故障監(jiān)測與維修診斷報告自動生成系統(tǒng)構(gòu)建與應(yīng)用
評論
0/150
提交評論