MFC程序启动步骤

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(),进行消息的转换和投递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值