MFC程序启动步骤

原创 2013年12月05日 20:49:57

MFC的库函数的源代码存放路径为:(用户安装路径)\Microsoft Visual Studio\VC98\MFC\SRC


以单文档程序为例,建立TEST工程。

各类视图:


其中,

CMainFrame公共继承于 CFrameWnd,而CFrameWnd公共继承于CWnd(CWnd派生出来的类都是窗口类),这个窗口称为框架窗口。

CTESTApp公共继承于CWinApp,CWinApp公共继承于CWinThread,CWinThread公共继承于CCmdTarget,CCmdTarget 公共继承于 CObject。

CTESTDoc公共继承于CDocument,CDocument公共继承于 CCmdTarget  ,用于数据的存储与加载。

CTESTView公共继承于CView,CView公共继承于CWnd,也是窗口类,用于数据的显示。


程序运行步骤如下(可在调试模式下逐步查看):

1、创建全局对象CTESTApp theApp;(全局对象或全局变量是在WinMain函数调用之前就创建的)

2、调用CTESTApp构造函数CTESTApp::CTESTApp(),从而调用CWinApp类的构造函数。

3、运行extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)函数。即main函数,此函数在。

4、调用AfxWinMain函数【在SRC文件夹的WINMAIN.CPP中】,在函数中,pApp指针调用了三个函数,这三个函数(AfxWinInit()、InitApplication()、InitInstance())就完成了作为一个应用程序所需要的几个步骤:设计窗口类,注册窗口类,创建窗口,显示窗口,更新窗口,消息循环,消息处理函数。

(Afx*前缀代表这是应用程序框架函数,是一些全局函数,应用程序框架是一套辅助生成应用程序的框架模型,把一些类做一些有机的集成,我们可根据这些类函数来设计自己的应用程序)


5、调用pThread->InitInstance()函数,完成初始化的工作。在这里,查看InitInstance()可知,其为虚函数,所以调用的是继承类的CTESTApp::InitInstance()函数。

6、调用AfxEndDeferRegisterClass(LONG fToRegister)【该函数在SRC文件夹中的WINCORE.CPP】。在函数中调用AfxRegisterClass(),从而调用RegisterClass(),从而完成各类的注册。

7、调用CMainFrame::PreCreateWindow(CREATESTRUCT& cs),从而调用CFrameWnd::PreCreateWindow(CREATESTRUCT& cs)【在SRC文件夹中的WINFRM.CPP中】,调用AfxEndDeferRegisterClass(LONG fToRegister)函数,并调用BOOL CWnd::Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect,CWnd* pParentWnd, UINT nID,CCreateContext* pContext)【在SRC文件夹中的WINCODE.CPP中】,实现窗口预定义。

8、最后在CTESTApp::InitInstance()中调用m_pMainWnd->ShowWindow(SW_SHOW);与m_pMainWnd->UpdateWindow();,实现窗口显示。

9、pThread->Run()完成了消息循环,在CWinThread::Run()函数中循环执行CWinThread::PumpMessage(),进行消息的转换和投递。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

VS2010MFC程序创立步骤 [大三TJB_708]

没有想到我现在做的活儿已经属于windows之上的应用程序了。不过乃是初生牛犊,但愿不是怕虎之辈(~·~这样用对么)。还记得以前做过的一次小开发是在黑莓的playbook之上,用的是C语言,这次是在我...

在Visual 2012 下不用向导生成MFC程序的步骤

看了一本叫《MFC.Windows程序设计》的书,里面开篇的实例不像有些书一样,用那些向导生成的程序,自己动手完整编出来的代码倒的确会给人成就感,但不用向导,使用这VS2012来编的时候,足足花了三天...

编写一个MFC程序的主要步骤

一、创建MFC应用程序 1.文件—新建—项目—MFC—MFC应用程序 MFC有三个选项:MFC ActiveX控件、MFC应用程序、MFC DLL。 MFC ActiveX 控件:用来生成MFCAct...

MFC程序的启动过程与相关函数的执行顺序

[转自:http://wenku.baidu.com/view/3bbcffdda58da0116c17499f.html] [JOEY:本篇实为《深入浅出MFC》第6章 MFC程序的生死因果的...

设置MFC程序开机自动启动

以注册表的形式设置MFC程序开机自动启动

怎样让MFC程序重新启动自己

怎样让程序重新启动自己 void   ReStart(BOOL   bNormal) {  PROCESS_INFORMATION   info;  STARTUPINFO sta...

MFC程序启动崩溃

修改静态库的字符集为UNICODE,导致MFC程序启动崩溃,出现问题代码如下: int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevI...

如何让基于对话框的MFC程序启动后自动隐藏对话框

转载自:http://www.cnblogs.com/dazhong/articles/1576866.html 对话框隐藏的几种方法 作者:A Kun (a_kun@etang.com) 有...

MFC程序启动过程(VS 2005代码剖析)

启动前做的事:初始化全局变量。大概做了以下四件事:appmodul.cpp 67行 通过调用函数AfxInitialize初始化了MFC的线程局部存储功能和程序全局信息,这些信息最重要的有以下两个:a...

MFC程序的启动过程与相关函数执行顺序

原文地址:http://hi.baidu.com/chuntian1919/blog/item/f5b7f5fd898e2c1408244d3c.html      了解MFC程序的启动过程,对于初学...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC程序启动步骤
举报原因:
原因补充:

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