单文档MFC程序的启动过程简化版
一、MFC程序的启动
1、定义和构造全局应用程序对象,CMyWinApp the App
这里有一些底层操作,有一个直接有用的结果是使得AfxGetApp能够返回theApp的地址。
2、调用WinMain函数:
这是编译链接的时候从外部链接进来的,确切的函数为AfxWinMain。
2.1 调用InitApplication();做一些底层初始化。是一个虚函数,可重载,但一般不重载;
2.2 调用InitInstance();是一个虚函数,一定要重载,否则什么都不做;
2.2.1 构造CSingleDocTemplate对象
因为文档类、框架窗口类和视类在MFC中被统一为一个文档模板类来进行管理,所以首先要生成一个文档模板对象,并将该对象以及以后可能会生成的其他文档模板对象统一由theApp来管理;
2.2.2 通过CWinApp::ProcessShellCommand来运行CWinApp::OnFileNew
生成文档类对象、框架窗口类对象和视类对象,并创建MainFrame和View窗口。详细见后面分析。
2.2.3 调用ShowWindow和UpdateWindow来显示更新窗口
2.3 调用Run();建立消息循环,是一个虚函数,但一般不重载。
二、如何新建一个文档,并产生窗口。其本质是先获取文档模板类指针,然后调用CSingleDocTemplate::OpenDocumentFile(NULL)
1、调用CDocTemplate::CreateNewDocument(),创建文档类对象
2、调用CDocTemplate::CreateNewFrame(pDocument, NULL),注册窗口类,创建框架窗口和视窗口。详细见后面分析
3、调用CDocTemplate::InitialUpdateFrame()完成其他操作
三、如何注册框架窗口类(CFrameWnd)的窗口类(Window Class),并创建框架窗口
1、调用AfxRegisterClass()注册窗口类,期间调用了几次PreCreateWindow(cs)来修改窗口类格式
2、调用Create创建窗口
2.1 调用PreCreateWindow(cs)修改cs,注册窗口类;
2.2 调用::CreateWindowEx创建框架窗口,最后发送WM_CREATE消息;
2.3 OnCreate函数响应消息,其中会创建视窗口。详细不分析了
浙公网安备 33010602011771号