class CTestApp::CWinApp{...}; //每个mfc程序有且只有一个从CWinApp派生出来的类(CTestApp)
CTestApp theApp; //只有一个从(CTestApp)实例化的对象(theApp),此对象唯一表示该应用程序
------------------------------------------------------------------------------------
APPCORE.CPP中有CWinApp的代码。
CWinApp::CWinApp() // CWinApp的构造函数
{
pThreadState->m_pCurrentWinThread = this; //this指向 (CTestApp) 的对象 (theApp)
}
------------------------------------------------------------------------------------------
APPMODUL.CPP中有_tWinMain()即WinMain()代码。
_tWinMain(...)
{
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
---------------------------------------------------------------------------------------------
WINMAIN.CPP中有AfxWinMain()的代码。CWinApp是由CWinThread派生出的子类。
AfxWinMain(...)
{
CWinThread* pThread = AfxGetThread(); // AfxGetThread 返回(CTestApp)对象(theApp)的指针
CWinApp* pApp = AfxGetApp(); //AfxGetApp返回(CTestApp)对象(theApp)的指针
pThread->InitInstance(); // InitInstance是虚函数,即(theApp)->InitInstance()
nReturnCode = pThread->Run(); //消息循环
}
-------------------------------------------------------------------------------------------
CTestApp::InitInstance()
{
ProcessShellCommand(cmdInfo); //完成窗口的注册创建,见 **** 部分
m_pMainWnd->ShowWindow(SW_SHOW); //m_pMainWnd指向CMainFrame创建的窗口对象
m_pMainWnd->UpdateWindow(); //显示及更新窗口
}
-------------------------------------------------------------------------------------------
*******************************************************
WINCORE.CPP中有AfxEndDeferRegisterClass()的代码
AfxEndDeferRegisterClass(...)
{
... //给窗口类成员赋值
AfxRegisterClass(&wndcls); //注册窗口类
}
----------------------------------------------------------------------------------------
CMainFrame类是CFrameWnd类的子类,而CFrameWnd类又是CWnd类的子类
CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
CFrameWnd::PreCreateWindow(cs); //调用父类的PreCreateWindow函数
}
------------------------------------------------------------------------------------------
WINFRM.CPP中有CFrameWnd::PreCreateWindow()的代码
CFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
{
if (cs.lpszClass == NULL) //判断类名是否为空
{
VERIFY(AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG)); //
AFXIMPL.H中指出AfxDeferRegisterClass宏指代 AfxEndDeferRegisterClass()
cs.lpszClass = _afxWndFrameOrView;
}
}
-----------------------------------------------------------------------------------------------
WINFRM.CPP中有CFrameWnd::LoadFrame()的代码
CFrameWnd::LoadFrame(...)
{
Create(...); //调用CFrameWnd::Create函数
}
--------------------------------------------------------------------------------------------
WINFRM.CPP中有CFrameWnd::Create()的代码
CFrameWnd::Create(...)
{
CreateEx(...); //CreateEx是父类CWnd的成员函数
}
-------------------------------------------------------------------------------------------------
WINCORE.CPP中有CWnd::CreateEx()的代码
CWnd::CreateEx(...)
{
... //为cs赋值,可自定义类
PreCreateWindow(cs); //调用CMainFrame::PreCreateWindow注册窗口类
::CreateWindowEx(...); //创建窗口
}
**********************************************************
----------------------------------------------------------------------------------------------
THRDCORE.CPP中有CWinThread::Run()的代码
CWinThread::Run()
{
PumpMessage(); //消息循环
}
---------------------------------------------------------------------------------------------
THRDCORE.CPP中有CWinThread::PumpMessage()的代码
CWinThread::PumpMessage()
{
::GetMessage(...);
::TranslateMessage(&m_msgCur);
::DispatchMessage(&m_msgCur);
}