VC++程序设计与应用--MFC应用程序概述
目錄
前言
1.1 Windows應用程序概述
1.1.1 窗口
1.1.2 消息和事件
1.1.3 基本數據類型
1.1.4 句柄
?2.2 MFC應用程序框架
2.2.1 創建MFC應用程序框架
2.2.2 MFC應用程序框架結構類
2.2.3 MFC應用程序分析
2.2.4 文檔/視圖結構
2.3 消息映射與消息處理?
2.3.1?消息的類別及其描述
2.3.2 MFC消息映射機制
2.3.3 自定義消息處理
2.4 程序調試
2.4.1?查找源程序中的語法錯誤
2.4.2? 調試器
2.4.3 跟蹤調試程序?
?總結
前言
本篇文章介紹MFC應用程序
一、MFC應用程序概述
1.1 Windows應用程序概述
1.1.1 窗口
窗口是用戶界面中最重要的部分。它是屏幕上與一個應用程序相對應的矩形區域,是用戶與產生該窗口的應用程序之間的可視界面。
?
1.1.2 消息和事件
????????Windows是一個基于事件的消息驅動系統,Windows應用程序是按照“事件→消息→處理” 的機制運行的。
??????? 所謂消息,就是用于描述某個事件發生的信息,而事件是對于Windows的某種操作。事件是因,消息是果,事件產生消息,消息對應事件。
??????? 所謂消息的處理,其實質就是事件的處理。當有某個事件(如單擊鼠標、鍵盤輸入和執行菜單命令等)發生時,Windows會根據具體的事件產生對應的消息,并發送到指定應用程序的消息隊列。應用程序從消息隊列中取出消息,并根據不同的消息進行不同的處理。
1.1.3 基本數據類型
?Windows編程中常用的基本數據類型的別名。
?
1.1.4 句柄
????????句柄是Windows編程的基礎,所謂句柄就是Windows使用的一種無重復整數。
?????? 句柄主要用來標識應用程序中的一個對象,如窗口、實例、菜單、內存、輸出設備、控制或文件等。
?????? Windows常見的公用句柄類型如下表所示:?
?2.2 MFC應用程序框架
2.2.1 創建MFC應用程序框架
下面通過一個實例介紹利用MFC AppWizard[exe]創建應用程序框架的步驟。
【例2.1】編寫一個SDI單文檔應用程序Li2_1,程序運行后,通過消息框輸出“這是一個單文檔應用程序!”的提示信息。
(1) 選擇File菜單下的New菜單項,系統彈出New對話框。
(2) MFC AppWizard-Step 1對話框主要用于選擇應用程序類型。AppWizard可以創建3種類型的應用程序框架。
?(3)MFC AppWizard-Step 2 of 6對話框中主要用于選擇應用程序所支持數據庫方式。
?
(4)在MFC AppWizard-Step 3 of 6對話框中選擇應用程序所支持的復合文檔類型。?
(5)在MFC AppWizard-Step 4 of 6對話框中設置應用程序的外觀特征。?
(6) 在MFC AppWizard-Step 5 of 6對話框中設置應用程序的風格。
?
(7) 在MFC AppWizard-Step 6 of 6對話框中,可以設置向導生成的文件名和類名。
?
(8)打開項目工作區中的ClassView類視圖,單擊CLi2_1View類左邊的“+”展開視圖類,雙擊打開OnDraw()函數,并添加代碼。
void CLi2_1View::OnDraw(CDC* pDC){CLi2_1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereMessageBox("這是一個單文檔應用程序!","消息框",MB_ICONEXCLAMATION|MB_OKCANCEL);}?(9) 選擇Build菜單中的Build Li2_1.exe菜單項,對工程進行編譯和鏈接,生成可執行文件。再選擇Build菜單中的Execute Li2_1.exe菜單命令運行程序。
?
2.2.2 MFC應用程序框架結構類
?MFC應用程序框架結構類的繼承關系:
1.CObject類
??? CObject是MFC類庫的根類,它幾乎描述了所有MFC類的一些公共特性,并且給所有由它派生出的類提供了3種重要特性,即:串行化支持、運行時類信息支持以及診斷和調試支持。
2.CCmdTarget類
??? 命令類CCmdTarget是CObject的子類,它是MFC庫中所有具有消息映射屬性的類的公共基類。從CCmdTarget派生的類能在程序運行時動態創建對象和處理命令消息。
3.CWinApp類
??? 應用程序類CWinApp是CWinThread的子類,封裝了初始化、運行、終止應用程序的代碼。可以由此派生自己的應用類。
4.CWnd類
???? 窗口類CWnd提供了MFC中所有窗口類的基本功能。從CWnd派生的類可以擁有自己的窗口,并對它進行控制。
5.CFrameWnd類
??? CFrameWnd類是CWnd類的派生類。它是所有其他框架窗口類的基類,主要用來管理一個窗口。
??? CFrameWnd類的對象是一個框架窗口,包括邊框、標題欄、菜單、最大化按鈕、最小化按鈕和一個激活的視圖。CFrameWnd類支持單文檔界面,對于多文檔界面,使用它的兩個派生類CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd類用于MDI的主窗口,CMDIChildWnd類用于MDI的子窗口。
6.CView類
??? 視圖類CView是CWnd類的子類。視圖類及其派生類用于管理框架窗口的客戶區。
?7.CDocument類
??? 文檔類CDocument負責裝載和維護文檔。文檔包括應用程序的工作成果或環境設置數據等,可以是程序需要保存的任何內容。
一個MFC應用程序并不直接操作上述類,而是以上述類為基類派生新的類,從而構建Windows應用程序的基本框架。
??? 例如,應用程序Li2_1中的類與這些基類的派生關系:
2.2.3 MFC應用程序分析
1.應用程序向導生成的文件
???? 下面以例2.1中創建的應用程序Li2_1為例,介紹MFC AppWizard[exe]向導所生成的各類文件及功能。?
(1) 頭文件與實現文件
(2) 資源文件
(3) 項目工作區文件和工程文件
(4) 其他文件
2.應用程序的執行過程
在應用程序的初始化過程中,同時還構造了文檔模板,產生最初的文檔、視圖和主框架窗口,并生成工具欄和狀態欄。
消息對話框
一種簡單的對話框,用戶可以直接調用消息對話框函數來使用它,而不需要自己創建。Visual C++提供3個消息對話框函數,它們的原型為:
int AfxMessageBox(LPCTSTR lpText,UINT nType=MB_OK,UINT nIDHelp=0); int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT nType); int CWnd::MessageBox(LPCTSTR lpText,LPCTSTR lpCaption=NULL,UINT nType= MB_OK);?
?
2.2.4 文檔/視圖結構
文檔/視圖體系結構是MFC應用程序框架結構的基石,它定義了一種程序結構,這種結構利用文檔對象保存應用程序的數據,依靠視圖對象控制視圖顯示數據,文檔與視圖的關系是一對多的關系,也就是說,文檔中的數據可以以不同的方式顯示。
2.3 消息映射與消息處理?
2.3.1?消息的類別及其描述
Windows消息主要有3種類型:標準Windows消息、控件消息和命令消息。
1.標準Windows消息
標準的Windows消息又分為3類:
鍵盤消息、鼠標消息和窗口消息。
(1)鍵盤消息
??? 鍵盤消息與鍵盤某個鍵的動作相關聯。常見的鍵盤消息有以下幾種。
(2) 鼠標消息
??? 鼠標消息涉及到鼠標的單擊、雙擊、拖動等。常用的鼠標消息有以下幾種。
(3) 窗口消息
??? 窗口消息一般與創建窗口、繪制窗口、移動窗口和銷毀窗口等動作有關。
??? 在MFC應用程序中,窗口消息是由視圖類、窗口類及它們的派生類處理的。
2.控件消息
??? 控件消息是指控件或其他子窗口向父窗口發送的WM_COMMAND消息。
??? 與其他標準的Windows消息一樣,控件消息也應該在視圖類、窗口類中進行處理。但是,如果用戶單擊按鈕控件時,發出的控件通知消息BN_CLICKED將作為命令消息來處理。
3.命令消息
??? 命令消息是由菜單項、工具欄按鈕、快捷鍵等用戶界面對象發出的WM_COMMAND消息。
??? 命令消息與其他消息不同,它可被更廣泛的對象如文檔、文檔模板、應用程序對象、窗口和視圖等處理。
2.3.2 MFC消息映射機制
- MFC采用消息映射來處理消息;
- 消息映射機制包括一組消息映射宏,用于把一個Windows消息和其消息處理函數聯系起來。
- 所有從CCmdTarget類派生出來的類都能夠擁有自己的消息映射。
為了使用消息映射宏:
- 首先在類定義的結尾用DECLARE_MESSAGE_MAP( )宏來聲明使用消息映射,該宏表示在為各個處理函數所寫的類聲明之后存在消息映射條目,這些函數是該類的成員函數。
- 然后在類的實現源文件中用BEGIN_MESSAGE_MAP( )和END_MESSAGE_MAP( )宏來定義消息映射。
MFC應用程序MESSAG_MAP消息映射的形式如下:
BEGIN_MESSAGE_MAP(MyClass, MybaseClass)//{ { AFX_MSG_MAP (MyClass) //ClassWizard維護消息映射宏的標記ON_... //MFC預定義消息映射宏ON_MESSAGE(message, memberFun)//用戶自定義消息映射宏//} } AFX_MSG_MAP END_MESSAGE_MAP()其中,MyClass是擁有消息映射的派生類名,MybaseClass 是其基類名。
2.3.3 自定義消息處理
自定義消息處理:定義消息名、分配ID值及完成消息映射。
Windows將所有的消息值分為4段:
常量WM_USER(為0x0400)與第一個自定義消息值相對應,用戶必須為自己的消息定義相對于WM_USER的偏移值,利用#define語句直接定義自己的消息,如下所示:
?
?#define? WM_USER? WM_USER+3 ;// 自定義消息WM_USER??? 也可以調用窗口消息注冊函數RegisterWindowMessage( )來定義一個Windows消息,由系統分配消息一個整數值。該函數原型為:
? UINT RegisterWindowMessage(LPCTSTR lpString);??? 其中參數lpString是要定義的消息名,調用成功后將返回該消息的ID值。
2.4 程序調試
程序調試分為源程序語法錯誤的修改和程序邏輯設計錯誤的修改兩個階段,編譯器只能找出源程序的語法錯誤,程序的邏輯設計錯誤只能靠程序員利用調試工具來手工檢查和修改。
2.4.1?查找源程序中的語法錯誤
語法錯誤分為:
如果程序有語法錯誤,則在執行編譯、鏈接命令時,Visual C++編譯器將在輸出窗口中給出語法錯誤提示信息,但鏈接錯誤提示信息不能給出錯誤發生的具體位置。
??? 在輸出窗口中雙擊錯誤提示信息或按F4鍵可以返回到源程序編輯窗口,并通過一個箭頭符號定位到產生錯誤的語句。
2.4.2? 調試器
為了查找和修改程序中的邏輯設計錯誤,Visual C++ IDE提供了重要的調試工具——Debug。
???? 單擊Build | Start Debug菜單中的菜單項,可以啟動Debug。
?
2.4.3 跟蹤調試程序?
即使源程序沒有語法錯誤,但最后生成的可執行程序也沒有像程序設計要求的那樣運行,這類程序設計上的錯誤被稱為邏輯設計錯誤或缺陷(bug)。
???? 跟蹤調試程序是查找此類邏輯設計錯誤方法中最常采用的動態方法。跟蹤調試的基本原理就是在程序運行過程的某一階段觀測程序的狀態。而在一般情況下程序是連續運行的,所以我們必須使程序在某一點停下來。
1.設置斷點
選擇Edit菜單下的Breakpoints菜單項,顯示Breakpoints對話框。
2.控制程序運行
3.觀察數據變化
在調試過程中,可以通過Watch和Variables窗口查看當前變量的值。
?總結
學業不如就業,就業不如創業,創業追求事業,事業成就偉業。紅塵萬丈一腔情,千秋偉業天地人,事在人為,敢作敢為,一切人為,拼搏創業—基業長青!
總結
以上是生活随笔為你收集整理的VC++程序设计与应用--MFC应用程序概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中达优控触摸屏编程视频教程_YKBuil
- 下一篇: c++程序内嵌lua字节码