一个简单的mfc单页界面文件读写程序(MFC 程序入口和执行流程)

转载 2017年01月03日 11:39:27

参考:MFC 程序入口和执行流程  http://www.cnblogs.com/liuweilinlin/archive/2012/08/16/2643272.html

        程序MFCFlie     http://www.pudn.com/downloads130/sourcecode/windows/file/detail555283.html

 

一 MFC程序执行过程剖析

//工程名字:MFCFile

//创建模板过程

//step1 :  CMFCFileApp theApp;           //c.1   MFCFile.cpp

//step2 :  CMFCFileApp::CMFCFileApp()

//step3 :   CMFCFileApp::InitInstance()

{

  CSingleDocTemplate* pDocTemplate;
  pDocTemplate = new CSingleDocTemplate( 
  IDR_MAINFRAME,
  RUNTIME_CLASS(CMFCFileDoc),
  RUNTIME_CLASS(CMainFrame), // main SDI frame window
  RUNTIME_CLASS(CMFCFileView));
  AddDocTemplate(pDocTemplate);

}

//step4 :   CMFCFileDoc::CMFCFileDoc()  //c.2   MFCFileDoc.cpp

//step5 :   CMainFrame::CMainFrame()    //c.3   MainFrm.cpp

//step6 :   CMainFrame::PreCreateWindow()  

//step7 :   CMainFrame::OnCreate(lpCreateStruct) //调用CFrameWnd::OnCreate(lpCreateStruct)进入MFCFileView.cpp

//step8 :   CMFCFileView::CMFCFileView()// c.4  MFCFileView.cpp

//step9 :   CMFCFileView::PreCreateWindow() 

//step10:  回到step7 :   CMainFrame::OnCreate(lpCreateStruct)

//step11:  CMFCFileDoc::OnNewDocument()//c.2 MFCFileDoc.cpp

//--------------------- 完成 ----------------------

//读写响应 

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()
    ON_COMMAND(IDC_FILE_WRITEOnFileWrite)
    ON_COMMAND(IDC_FILE_READOnFileRead)
END_MESSAGE_MAP()

//CMainFrame::OnFileRead() 

//CMainFrame::OnFileWrite() 

1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用程序的窗口函数。而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派生类的声明和定义以及一个从CWinApp类派生而来的类的全局对象。CWinApp类被称之为应用程序对象,在一个MFC程序当中只允许有一个应用程序对象。由于CWinApp的派生对象是全局的,因此这个对象的构造函数会在所有的其他代码运行之前被调用,而由于CWinApp类当中包含了HWND、HINSTANCE等句柄的存在,其构造函数就执行了对这些成员数据的初始化操作,这里的所谓初始化仅仅是把所有的句柄对象赋值为NULL。//step1

2)在调用完CWinApp的构造函数以后由连接器向程序内自动链接的AfxWinMain函数将被调用,而这个函数可以被看作MFC程序的入口函数。在这个函数当中调用全局AfxGetApp()函数获得应用程序对象,这时将调用AfxInit全局函数,这个函数的功能是使用操作系统传递给AfxWinMain函数的参数初始化应用程序对象当中的相关句柄数据成员。//step2

3)之后AfxWinMain函数调用CWinApp::InitApplication成员函数,这个成员函数用来初始化应用程序对象当中的关于文档部分的内容。

4)随后调用CWinApp::InitInstance成员函数,在这个成员函数当中,使用new操作在堆上声明一个框架窗口对象,由此导致框架窗口对象的构造函数被调用,在框架窗口构造函数当中调用Create函数来创建窗口,而调用的Create函数一般将WNDCLASS参数设置成NULL,这样就由MFC内部调用PreCreateWindow函数,在这个函数当中由MFC注册几个默认的WNDCLASS供框架窗口的Create使用。这时程序控制权交还给CWinApp::InitInstance成员函数内部,由这个函数调用CWnd::ShowWindow显示窗口并且调用CWnd::UpdateWindow向窗口发送WM_PAINT消息。调用完CWinApp::InitInstance成员函数后由AfxWinMain函数调用CWinApp::Run成员函数,并由这个函数来创建和处理消息循环,并且在没有消息的时候处理OnIdle空闲处理。至此整个程序的创建过程完成。//step3-11
 5)在程序的运行过程当中,由操作系统源源不断的发送消息给应用程序,并且由CWinApp::Run当中的消息循环处理并且分发给相关的窗口对象的DefWindowProc成员函数,并由这个成员函数查询窗口对象的消息映射表,如果查到对应项,则由登记在消息映射表当中的类成员函数处理,否则则按照Message Route当中的顺序象父层类发送。
 6)在消息运行结束,用户按下关闭按钮后,操作系统向程序发送WM_CLOSE消息,默认状况下程序调用DestoryWindow并且发送WM_DESTORY消息,应用程序接受到这个消息以后的默认操作是调用PostQuitMessage函数,由这个函数发送WM_QUIT消息。当程序对象接受到WM_QUIT消息后消息循环结束,由AfxWinMain函数调用AfxTerm函数清理程序使用过的资源并且结束整个程序。

 

MFC入门(一)-- 第一个简单的windows图形化界面小程序(打开计算器,记事本,查IP)

一个可以发给爸妈使用的实用的图形化小程序,一刻钟完成系列~
  • zmdsjtu
  • zmdsjtu
  • 2016年08月25日 08:43
  • 13097

MFC 程序入口和执行流程

随笔- 229  文章- 0  评论- 0  MFC 程序入口和执行流程 一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函...
  • zhangyulin54321
  • zhangyulin54321
  • 2013年10月06日 16:37
  • 688

MFC 应用程序框架-程序入口和执行流程

一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调...
  • xj2419174554
  • xj2419174554
  • 2014年07月19日 13:15
  • 1165

MFC程序入口和执行流程

一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消...
  • bigtree14
  • bigtree14
  • 2015年09月17日 21:52
  • 141

MFC一个简单的计算器程序

1,简介 某个晚上帮人做的一个MFC课程设计的作业。大概花了两三个小时。 效果: 就和平常使用的计算器用法差不多。 2,源码下载 MFC一个简单的计算器程序源码 3,...
  • dpsying
  • dpsying
  • 2014年02月10日 20:54
  • 47014

vs2010最简单的MFC窗口程序

在Visual Studio中创建一个新的空Win32工程,配置属性--常规---在静态库中使用 MFC 内容如下: 1.h #ifndef MFCTEST_HEAD #define MFCTEST_...
  • qq125096885
  • qq125096885
  • 2015年03月20日 18:01
  • 805

MFC-最简单的MFC程序

       尽管刚接触MFC不久,但其开发模式已初有感受,抛开复杂的应用不谈,想想我们通常怎样来写一个简单的MFC程序。也许浮现在你脑海里的是程序向导,类向导,资源编辑器,以及程序代码,此时你大概会...
  • linzhengqun
  • linzhengqun
  • 2007年12月13日 09:39
  • 9166

MFC程序入口分析

初学mfc,发现找不到main函数和winmain函数,这篇文章解答了我的问题 先从一个最小的MFC程序说起。 // The minimal MFC program *******...
  • h123120
  • h123120
  • 2015年11月18日 23:37
  • 319

C/C++拾遗(十九):MFC - 一个简单的窗口程序

在复习完C/C++的基础之后,今天开始学习MFC,自己使用的资料是孙鑫老师的《VC++深入精解》作为主要的学习脉络,而侯老师的《深入浅出MFC》则作为补充。今天是第一章基础,简要介绍windows编程...
  • a1232345
  • a1232345
  • 2015年07月13日 16:17
  • 2073

MFC中的WinMain()入口去哪里了?

学过一段时间的MFC之后,很多人大概都有一个疑问:在MFC中,WinMain()哪去了?因为任何一个使用过Win32 SDK编程的人都知道,WinMain()函数是Win32程序开始的入口点,可是在M...
  • weiaipan1314
  • weiaipan1314
  • 2016年06月26日 23:05
  • 2731
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的mfc单页界面文件读写程序(MFC 程序入口和执行流程)
举报原因:
原因补充:

(最多只允许输入30个字)