c++ MFC框架分析 求解

[复制链接]
查看11 | 回复2 | 2010-6-14 16:36:25 | 显示全部楼层 |阅读模式
我用mfc向导建立的SDI应用程序,名字是Ch301,帮我分析一下构架
首先 执行 ch301.cpp中的 CCh301ApptheApp; 这一句 ,执行了CCh301App的构造函数. CCh301App继承自CwinApp
构造函数CwinApp();的代码在APPCORE.CPP中 如下
CWinApp::CWinApp(LPCTSTR lpszAppName)
{
if (lpszAppName != NULL)
m_pszAppName = _tcsdup(lpszAppName);
else
m_pszAppName = NULL;
// initialize CWinThread state
AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE();
AFX_MODULE_THREAD_STATE* pThreadState = pModuleState->m_thread;
ASSERT(AfxGetThread() == NULL);
pThreadState->m_pCurrentWinThread = this;
ASSERT(AfxGetThread() == this);
m_hThread = ::GetCurrentThread();
m_nThreadID = ::GetCurrentThreadId();
// initialize CWinApp state
ASSERT(afxCurrentWinApp == NULL); // only one CWinApp object please
pModuleState->m_pCurrentWinApp = this;
ASSERT(AfxGetApp() == this);
// in non-running state until WinMain
m_hInstance = NULL;
m_pszHelpFilePath = NULL;
m_pszProfileName = NULL;
m_pszRegistryKey = NULL;
m_pszExeName = NULL;
m_pRecentFileList = NULL;
m_pDocManager = NULL;
m_atomApp = m_atomSystemTopic = NULL;
m_lpCmdLine = NULL;
m_pCmdInfo = NULL;
// initialize wait cursor state
m_nWaitCursorCount = 0;
m_hcurWaitCursorRestore = NULL;
// initialize current printer state
m_hDevMode = NULL;
m_hDevNames = NULL;
m_nNumPreviewPages = 0;
// not specified (defaults to 1)
// initialize DAO state
m_lpfnDaoTerm = NULL; // will be set if AfxDaoInit called
// other initialization
m_bHelpMode = FALSE;
m_nSafetyPoolSize = 512;
// default size
}
为什么执行完这个构造函数之后就跑到_tWinMain()里边去了呢?(_tWinMain就是winmain)
我知道流程是这样的,但是我想知道为什么这样,事情总有道理的
也罢,我去别处找找答案吧

回复

使用道具 举报

千问 | 2010-6-14 16:36:25 | 显示全部楼层
theApp是所有MFC程序的一个通用的全局对象。类的对象在声明的时候,当然要用其构造函数进行初始化了。初始化完成之后才进入所有Windows程序的入口函数,那就是WinMain了。这是Windows程序的固定步骤,没有为什么。 你可以自己用MFC创建一个SDI应用程序,不用添加任何代码,完全由MFC自动生成,看看以上内容是不是完全一样,这些是固定的步骤。创建一个类对象-初始化-进入WinMain,就这样。
回复

使用道具 举报

千问 | 2010-6-14 16:36:25 | 显示全部楼层
因为编译器会首先初始化全局对象,接着找到 _tWinMain()这个函数进入执行。没什么高深的道理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行