最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MFC程序執(zhí)行過程深入剖析

 更新時間:2014年09月04日 16:34:39   投稿:shichen2014  
這篇文章主要介紹了MFC程序執(zhí)行過程,包括對MFC執(zhí)行流程的分析以及斷點調試分析出的SDI程序執(zhí)行流程,需要的朋友可以參考下

本文較為詳細的分析了VC++程序設計的MFC程序執(zhí)行過程,有助于加深對MFC程序運行原理的理解。分享給大家供大家參考之用。具體分析如下:

一 MFC程序執(zhí)行過程剖析

1)我們知道在WIN32API程序當中,程序的入口為WinMain函數(shù),在這個函數(shù)當中我們完成注冊窗口類,創(chuàng)建窗口,進入消息循環(huán),最后由操作系統(tǒng)根據(jù)發(fā)送到程序窗口的消息調用程序的窗口函數(shù)。而在MFC程序當中我們不在能找到類似WinMain這樣的程序入口,取而代之的是一系列派生類的聲明和定義以及一個沖CWinApp類派生而來的類的全局對象。CWinApp類被稱之為應用程序對象,在一個MFC程序當中只允許有一個應用程序對象。由于CWinApp的派生對象是全局的,因此這個對象的構造函數(shù)會在所有的其他代碼運行之前被調用,而由于CWinApp類當中包含了HWND、HINSTANCE等句柄的存在,其構造函數(shù)就執(zhí)行了對這些成員數(shù)據(jù)的初始化操作,這里的所謂初始化僅僅是把所有的句柄對象賦值為NULL。

2)在調用完CWinApp的構造函數(shù)以后由連接器向程序內自動鏈接的AfxWinMain函數(shù)將被調用,而這個函數(shù)可以被看作MFC程序的入口函數(shù)。在這個函數(shù)當中調用全局AfxGetApp()函數(shù)獲得應用程序對象,這時將調用AfxInit全局函數(shù),這個函數(shù)的功能是使用操作系統(tǒng)傳遞給AfxWinMain函數(shù)的參數(shù)初始化應用程序對象當中的相關句柄數(shù)據(jù)成員。

3)之后AfxWinMain函數(shù)調用CWinApp::InitApplication成員函數(shù),這個成員函數(shù)用來初始化應用程序對象當中的關于文檔部分的內容。

4)隨后調用CWinApp::InitInstance成員函數(shù),在這個成員函數(shù)當中,使用new操作在堆上聲明一個框架窗口對象,由此導致框架窗口對象的構造函數(shù)被調用,在框架窗口構造函數(shù)當中調用Create函數(shù)來創(chuàng)建窗口,而調用的Create函數(shù)一般將WNDCLASS參數(shù)設置成NULL,這樣就由MFC內部調用PreCreateWindow函數(shù),在這個函數(shù)當中由MFC注冊幾個默認的WNDCLASS供框架窗口的Create使用。這時程序控制權交還給CWinApp::InitInstance成員函數(shù)內部,由這個函數(shù)調用CWnd::ShowWindow顯示窗口并且調用CWnd::UpdateWindow向窗口發(fā)送WM_PAINT消息。調用完CWinApp::InitInstance成員函數(shù)后由AfxWinMain函數(shù)調用CWinApp::Run成員函數(shù),并由這個函數(shù)來創(chuàng)建和處理消息循環(huán),并且在沒有消息的時候處理OnIdle空閑處理。至此整個程序的創(chuàng)建過程完成。

5)在程序的運行過程當中,由操作系統(tǒng)源源不斷的發(fā)送消息給應用程序,并且由CWinApp::Run當中的消息循環(huán)處理并且分發(fā)給相關的窗口對象的DefWindowProc成員函數(shù),并由這個成員函數(shù)查詢窗口對象的消息映射表,如果查到對應項,則由登記在消息映射表當中的類成員函數(shù)處理,否則則按照Message Route當中的順序象父層類發(fā)送。

6)在消息運行結束,用戶按下關閉按鈕后,操作系統(tǒng)向程序發(fā)送WM_CLOSE消息,默認狀況下程序調用DestoryWindow并且發(fā)送WM_DESTORY消息,應用程序接受到這個消息以后的默認操作是調用PostQuitMessage函數(shù),由這個函數(shù)發(fā)送WM_QUIT消息。當程序對象接受到WM_QUIT消息后消息循環(huán)結束,由AfxWinMain函數(shù)調用AfxTerm函數(shù)清理程序使用過的資源并且結束整個程序。

小結:以上的所有描述涵蓋了一個程序從開始、運行到結束的所有過程。 相信大家有點暈點了吧,實際編程中沒有必要深刻理解這么多,這些大都是由MFC內部自動幫我們完成的。實際MFC編程過程中,其實懂得MFC程序中各個函數(shù)的執(zhí)行流程即可。有時候過于追究MFC細節(jié)會白白浪費我們的精力,應該將主要精力放在使用MFC解決實際問題上。

二 VC6中SDI程序的執(zhí)行流程

下面以VC6中的sdi工程為例,通過給每個函數(shù)前設置斷點后調式執(zhí)行,可以看出MFC的SDI的執(zhí)行流程。記錄如下,希望對MFC執(zhí)行有疑惑的人有幫助。

1)CSdiApp theApp;          //sdi.cpp
2)CSdiApp::CSdiApp()             //sdi.cpp
3)BOOL CSdiApp::InitInstance()         //sdi.cpp
4)CSdiDoc::CSdiDoc()                   //sdiDoc.cpp
5)CMainFrame::CMainFrame()          //MainFrm.cpp
6)BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)    //MainFrm.cpp
7)int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)    //MainFrm.cpp
8)CSdiView::CSdiView()                     //sdiView.cpp
9)BOOL CSdiView::PreCreateWindow(CREATESTRUCT& cs)         //sdiView.cpp
10)BOOL CSdiDoc::OnNewDocument()                //sdiDoc.cpp
11) void CSdiView::OnDraw(CDC* pDC)                //sdiView.cpp
// ---------------- 關閉窗口后-------------------------------------
12) CSdiView::~CSdiView()
13) CMainFrame::~CMainFrame()
14) CSdiDoc::~CSdiDoc()

感興趣的朋友可以采用斷點調試測試一下SDI程序的執(zhí)行流程,以加深對MFC運行原理的理解,從而更好的掌握Windows程序設計。

相關文章

  • 詳解C語言整數(shù)和浮點數(shù)在內存中的存儲

    詳解C語言整數(shù)和浮點數(shù)在內存中的存儲

    這篇文章主要介紹了C語言整數(shù)和浮點數(shù)在內存中是如何存儲的,文中有詳細的代碼示例供大家參考,對大家了解學習C語言整數(shù)和浮點數(shù)在內存中的存儲有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • C語言獲得電腦的IP地址的小例子

    C語言獲得電腦的IP地址的小例子

    C語言獲得電腦的IP地址的小例子,需要的朋友可以參考一下
    2013-05-05
  • C++中實現(xiàn)WebSocket通信的兩種方法:libwebsockets庫、Boost.Beast?庫

    C++中實現(xiàn)WebSocket通信的兩種方法:libwebsockets庫、Boost.Beast?庫

    C++中WebSocket庫主要有以下幾個?:cpp-websocket?、asio_websocket?、websockets++?、?websocketpp?、?libwebsockets?、?uWebSockets?、Boost.Beast?、Simple-WebSocket-Server?,這篇文章使用libwebsockets庫、Boost.Beast?庫來實現(xiàn)c++中的WebSocket通信
    2025-01-01
  • OpenCV透視變換應用之書本視圖矯正+廣告屏幕切換

    OpenCV透視變換應用之書本視圖矯正+廣告屏幕切換

    透視變換是指利用透視中心、像點、目標點三點共線的條件,按透視旋轉定律使承影面繞跡線旋轉某一角度,破壞原有的投影光線束,仍能保持承影面上投影幾何圖形不變的變換。本文將為大家介紹兩個OpenCV透視變換應用,需要的可以參考一下
    2022-08-08
  • C++實現(xiàn)二叉樹及堆的示例代碼

    C++實現(xiàn)二叉樹及堆的示例代碼

    這篇文章主要介紹了C++實現(xiàn)二叉樹及堆的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • c++ 遞歸鎖的使用示例代碼

    c++ 遞歸鎖的使用示例代碼

    這篇文章主要介紹了c++ 遞歸鎖的使用示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • C++詳細講解圖的遍歷

    C++詳細講解圖的遍歷

    圖的遍歷是指,從給定圖中任意指定的頂點(稱為初始點)出發(fā),按照某種搜索方法沿著圖的邊訪問圖中的所有頂點,使每個頂點僅被訪問一次,這個過程稱為圖的遍歷
    2022-05-05
  • 詳解C++數(shù)組和數(shù)組名問題(指針、解引用)

    詳解C++數(shù)組和數(shù)組名問題(指針、解引用)

    這篇文章主要介紹了詳解C++數(shù)組和數(shù)組名問題(指針、解引用),指針的實質就是個變量,它跟普通變量沒有任何本質區(qū)別,指針本身是一個對象,同時指針無需在定義的時候賦值,具體內容詳情跟隨小編一起看看吧
    2021-09-09
  • C語言所有經典排序方法的實現(xiàn)代碼

    C語言所有經典排序方法的實現(xiàn)代碼

    這篇文章給大家分享C語言所有經典排序方法,文章給大家提供完整的實例代碼幫助大家快速學習掌握C語言排序方法,感興趣的朋友一起看看吧
    2021-06-06
  • C/C++雜記 虛函數(shù)的實現(xiàn)的基本原理(圖文)

    C/C++雜記 虛函數(shù)的實現(xiàn)的基本原理(圖文)

    這篇文章主要介紹了C/C++雜記 虛函數(shù)的實現(xiàn)的基本原理(圖文),需要的朋友可以參考下
    2016-06-06

最新評論

弥渡县| 开江县| 武城县| 五华县| 行唐县| 通河县| 牙克石市| 如东县| 龙游县| 芷江| 巩留县| 西青区| 长武县| 垫江县| 百色市| 皋兰县| 巫山县| 闻喜县| 乐山市| 乌兰浩特市| 察隅县| 临夏市| 仙桃市| 仪征市| 荔浦县| 武宣县| 崇明县| 洛川县| 汽车| 西峡县| 吉水县| 锦屏县| 靖远县| 从化市| 天镇县| 南陵县| 工布江达县| 沂南县| 竹北市| 巴楚县| 三门县|