日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++程序设计与应用--MFC应用程序概述

發布時間:2023/12/31 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

??? CObjectMFC類庫的根類,它幾乎描述了所有MFC類的一些公共特性,并且給所有由它派生出的類提供了3種重要特性,即:串行化支持、運行時類信息支持以及診斷和調試支持。

2.CCmdTarget

??? 命令類CCmdTargetCObject的子類,它是MFC庫中所有具有消息映射屬性的類的公共基類。從CCmdTarget派生的類能在程序運行時動態創建對象和處理命令消息。

3.CWinApp

??? 應用程序類CWinAppCWinThread的子類,封裝了初始化、運行、終止應用程序的代碼。可以由此派生自己的應用類。

4.CWnd

???? 窗口類CWnd提供了MFC中所有窗口類的基本功能。從CWnd派生的類可以擁有自己的窗口,并對它進行控制。

5.CFrameWnd

??? CFrameWnd類是CWnd類的派生類。它是所有其他框架窗口類的基類,主要用來管理一個窗口。

??? CFrameWnd類的對象是一個框架窗口,包括邊框、標題欄、菜單、最大化按鈕、最小化按鈕和一個激活的視圖。CFrameWnd類支持單文檔界面,對于多文檔界面,使用它的兩個派生類CMDIFrameWndCMDIChildWndCMDIFrameWnd類用于MDI的主窗口,CMDIChildWnd類用于MDI的子窗口。

6.CView

??? 視圖類CViewCWnd類的子類。視圖類及其派生類用于管理框架窗口的客戶區。

?7.CDocument

??? 文檔類CDocument負責裝載和維護文檔。文檔包括應用程序的工作成果或環境設置數據等,可以是程序需要保存的任何內容。

一個MFC應用程序并不直接操作上述類,而是以上述類為基類派生新的類,從而構建Windows應用程序的基本框架。

??? 例如,應用程序Li2_1中的類與這些基類的派生關系:

2.2.3 MFC應用程序分析

1.應用程序向導生成的文件

???? 下面以例2.1中創建的應用程序Li2_1為例,介紹MFC AppWizard[exe]向導所生成的各類文件及功能。?

(1) 頭文件與實現文件

  • MainFrm.hMainFrm.cpp:定義和實現窗口框架類CMainFrame
  • CLi2_1Doc.hCLi2_1Doc.cpp:定義和實現文檔類CLi2_1Doc
  • CLi2_1View.h CLi2_1View.cpp:定義和實現視圖類CLi2_1View
  • CLi2_1.h CLi2_1.cpp:定義和實現應用程序類CLi2_1App
  • Resource.h:定義工程中所有資源標識符,給資源ID分配一個整數值。
  • StdAfx.hStdAfx.cpp:用于建立一個預編譯的頭文件CLi2_1.PCH和一個預定義的類型文件StdAfx.obj
  • (2) 資源文件

  • Li2_1.rcLi2_1.rc2Li2_1.rc文件是程序所使用的所有Windows資源的列表。
  • Li2_1.ico:應用程序的圖標所使用的圖標文件。
  • Li2_1Doc.ico:應用程序的文檔圖標文件。文檔圖標一般顯示在多文檔程序界面上。
  • Toolbar.bmp:工具欄按鈕的位圖文件。
  • (3) 項目工作區文件和工程文件

  • Li2_1.dsw:保存當前工作區所包含的工程的信息。
  • Li2_1.dsp:包含當前工程的設置、工程中的文件等信息。
  • (4) 其他文件

  • Li2_1.clw:該文件是類信息文件。它保存了ClassWizard編輯現有類或增加新類時需使用的類信息,同時還保存了創建、編輯消息映射和成員函數所需的信息。
  • ReadMe.txt:該文件是工程自述文件。主要介紹所創建文件的內容和功能,以及添加用戶代碼、更改使用語言的方法。
  • 2.應用程序的執行過程

  • 啟動:創建應用程序對象theApp、調用應用程序類的構造函數初始化對象theApp
  • 應用程序框架調用MFC提供的AfxWinMain( )主函數。
  • AfxWinMain( )主函數,首先通過調用全局函數AfxGetApp( )來獲取theApp的指針pApp
  • 然后通過該指針調用theApp的成員函數InitInstance( )來初始化應用程序。
  • 在應用程序的初始化過程中,同時還構造了文檔模板,產生最初的文檔、視圖和主框架窗口,并生成工具欄和狀態欄。

  • InitInstance( )函數執行完畢后,WinMain( )函數將調用成員函數?Run( ),進入消息處理循環;
  • 函數Run( )收到WM_QUIT消息。
  • MFC首先調用CWinApp類的成員函數ExitInstance( )
  • 然后調用靜態對象的析構函數;
  • 退出應用程序,將控制權交給操作系統。
  • 消息對話框

    一種簡單的對話框,用戶可以直接調用消息對話框函數來使用它,而不需要自己創建。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消息

  • WM_COMMAND以外,所有以WM_為前綴的消息都是標準Windows消息;
  • 由窗口類或視圖類處理;
  • 都有默認的處理函數,它們在CWnd類中進行了預定義。
  • 標準的Windows消息又分為3類:

    鍵盤消息、鼠標消息和窗口消息。

    (1)鍵盤消息

    ??? 鍵盤消息與鍵盤某個鍵的動作相關聯。常見的鍵盤消息有以下幾種。

  • WM_KEYDOWNWM_KEYUP:按下、釋放非系統鍵產生的消息。
  • WM_CHAR:輸入非系統字符時產生的消息。
  • (2) 鼠標消息

    ??? 鼠標消息涉及到鼠標的單擊、雙擊、拖動等。常用的鼠標消息有以下幾種。

  • WM_MOUSEMOVE:鼠標移動時產生的消息。
  • ?WM_RBUTTONDOWN:鼠標右鍵按下時產生的消息。
  • ?WM_LBUTTONDOWN:鼠標左鍵按下時產生的消息。
  • ?WM_LBUTTONDBLCLICK:鼠標雙擊時產生的消息。
  • (3) 窗口消息

    ??? 窗口消息一般與創建窗口、繪制窗口、移動窗口和銷毀窗口等動作有關。

    ??? 在MFC應用程序中,窗口消息是由視圖類、窗口類及它們的派生類處理的。

    2.控件消息

    ??? 控件消息是指控件或其他子窗口向父窗口發送的WM_COMMAND消息。

    ??? 與其他標準的Windows消息一樣,控件消息也應該在視圖類、窗口類中進行處理。但是,如果用戶單擊按鈕控件時,發出的控件通知消息BN_CLICKED將作為命令消息來處理。

    3.命令消息

    ??? 命令消息是由菜單項、工具欄按鈕、快捷鍵等用戶界面對象發出的WM_COMMAND消息。

    ??? 命令消息與其他消息不同,它可被更廣泛的對象如文檔、文檔模板、應用程序對象、窗口和視圖等處理。

    2.3.2 MFC消息映射機制

    • MFC采用消息映射來處理消息;
    • 消息映射機制包括一組消息映射宏,用于把一個Windows消息和其消息處理函數聯系起來。
    • 所有從CCmdTarget類派生出來的類都能夠擁有自己的消息映射。
    MFC消息映射機制有關的宏有以下3個:
  • DECLARE_MESSAGE_MAP( )
  • BEGIN_MESSAGE_MAP(MyClass, MybaseClass)
  • END_MESSAGE_MAP( )
  • 為了使用消息映射宏:

    • 首先在類定義的結尾用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段:

  • 0x00000x03FF:用于Windows系統消息
  • 0x04000x7FFF:用于用戶自定義的窗口消息
  • 0x80000xBFFF:Windows保留值
  • 0xC0000xFFFF:用于應用程序的字符串消息。
  • 常量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?查找源程序中的語法錯誤

    語法錯誤分為:

  • 一般錯誤(error):出現該錯誤時將不會產生可執行程序;
  • 警告錯誤(warning):出現該錯誤時能夠生成可執行程序,但程序運行時可能發生錯誤,嚴重的warning錯誤還會引起死機現象。
  • 如果程序有語法錯誤,則在執行編譯、鏈接命令時,Visual C++編譯器將在輸出窗口中給出語法錯誤提示信息,但鏈接錯誤提示信息不能給出錯誤發生的具體位置。

    ??? 在輸出窗口中雙擊錯誤提示信息或按F4鍵可以返回到源程序編輯窗口,并通過一個箭頭符號定位到產生錯誤的語句。

    2.4.2? 調試器

    為了查找和修改程序中的邏輯設計錯誤,Visual C++ IDE提供了重要的調試工具——Debug

    ???? 單擊Build | Start Debug菜單中的菜單項,可以啟動Debug

    ?

    2.4.3 跟蹤調試程序?

    即使源程序沒有語法錯誤,但最后生成的可執行程序也沒有像程序設計要求的那樣運行,這類程序設計上的錯誤被稱為邏輯設計錯誤或缺陷(bug)

    ???? 跟蹤調試程序是查找此類邏輯設計錯誤方法中最常采用的動態方法。跟蹤調試的基本原理就是在程序運行過程的某一階段觀測程序的狀態。而在一般情況下程序是連續運行的,所以我們必須使程序在某一點停下來。

    1.設置斷點

    選擇Edit菜單下的Breakpoints菜單項,顯示Breakpoints對話框。

    2.控制程序運行

  • Step Over:運行當前箭頭指向的代碼(只運行一條代碼)
  • Step Into:如果當前箭頭所指的代碼是一個函數的調用,則用Step Into進入該函數并進行單步執行。
  • ?Step Out:如果當前箭頭所指向的代碼是在某一函數內部,用它可使程序運行至函數返回處。
  • ?Run to Cursor:使程序運行至光標所指的代碼處。?
  • 3.觀察數據變化

    在調試過程中,可以通過WatchVariables窗口查看當前變量的值。


    ?總結

    學業不如就業,就業不如創業,創業追求事業,事業成就偉業。紅塵萬丈一腔情,千秋偉業天地人,事在人為,敢作敢為,一切人為,拼搏創業—基業長青!

    總結

    以上是生活随笔為你收集整理的VC++程序设计与应用--MFC应用程序概述的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。