MFC框架基础分析
来源:互联网 发布:linux rm命令详解 编辑:程序博客网 时间:2024/05/22 12:58
题外:
1、和SDK编程不一样,MFC框架中的WinMain是通过连接加入工程的,所以直接搜索不到。可以再MFC/SRC中搜索,WinMain保存在APPMODUL.CPP。
2、不管是那种编程方式,程序不总是从main或WinMain执行,至少全局变量或全局对象要先一步的分配内存或者构造。
分析:
1、产生全局对象theApp(CTestApp.cpp),这个对象代表着当前MFC工程应用程序:
CTestApp theApp;
2、theApp对象的产生需要构造函数,而class CTestApp : public CWinApp,同时调用子类的构造函数前,需要调用基类的构造函数,所以CWinApp::CWinApp(appcore.cpp)被调用。其中:
pModuleState->m_pCurrentWinApp = this;
this是子类对象,在此成为基类成员变量。
3、WinMain(APPMODUL.CPP)的实际执行者AfxWinMain(WINMAIN.CPP)中,有如下重要代码:
……
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp();
getthread通常和Getapp作用一样,用于获取第2步保存的子类对象theApp。
……
pApp->InitApplication()
一些初始化工作
……
pThread->InitInstance()
pThread即theApp对象指针,所以这里调用子类CTestApp::InitInstance(),在这个函数中窗口显示,更新。
……
pThread->Run();
这里完成消息循环。实际调用CWinThread::Run()(THRDCORE.CPP)完成消息循环。
4、窗口的设计主要在PreCreateWindow完成。
CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中调用基类的
CFrameWnd::PreCreateWindow(cs) (WINFRM.CPP)中调用
AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG)(WINCORE.CPP),同时在afximpl.h中:
#define AfxDeferRegisterClass(fClass) AfxEndDeferRegisterClass(fClass)
BOOL AFXAPI AfxEndDeferRegisterClass()(WINCORE.CPP)这个函数中完成设计窗口类,并注册窗口类。
5、创建窗口最终是由CreateWindowEx函数完成。
CFrameWnd::LoadFrame调用 CFrameWnd::Create (winfrm.cpp)
Create函数中调用CreateEx,CreateEx函数在CFrameWnd没有重写,所以调用的是基类的
CWnd::CreateEx(wincore.cpp)
{
……
PreCreateWindow(cs);
……
::CreateWindowEx();
}
上面PreCreateWindow(cs)是虚函数,这里调用的实际是子类的PreCreateWindow,因为CreateEx本省就是被子类调用。
- MFC框架基础分析
- MFC框架分析
- MFC框架分析
- MFC 框架分析
- MFC 框架深度分析
- MFC框架略分析
- MFC框架分析
- MFC应用程序框架分析
- MFC应用程序框架分析
- MFC应用程序框架分析
- MFC程序框架分析 rtti
- storm基础框架分析
- storm基础框架分析
- storm基础框架分析
- shopnc基础框架分析
- MFC Diary - Visual C++ 基础框架1
- MFC Diary - Visual C++ 基础框架2
- MFC框架中的设计模式分析
- Map的常见用法总结
- Java编程那些事儿109——网络编程示例2
- Linux线程通信--信号量(例子)
- PIC16C5X的I/O口结构(转)
- 用Eclipse调用AIX的wsdl2java
- MFC框架基础分析
- Java内部类深入学习
- SQL语句导入导出EXCEL
- 17绝技
- COMMAND 与 UPDATE_COMMAND_UI区别——MFC
- 深入总结Java中多态实现机制
- AVL 树--wiki
- DataSet用法
- OK 重新开始这个项目!