关闭

MFC程序启动步骤

577人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:164470次
    • 积分:2084
    • 等级:
    • 排名:第18971名
    • 原创:42篇
    • 转载:87篇
    • 译文:0篇
    • 评论:21条
    最新评论