远亲不如近邻,给自己一个机会,让更多人成为你的邻居,欢迎入住我家邻居社区 www.WoJiaLinJu.com

MFC的调用层次关系

作者
88doc整理发布

简介:

最近在看MFC的东西,有点理解整理出来送给关注www.88doc.com的朋友们

这个理解和学习是比较漫长的这里先给出整理出来的一个例子运行之后就有所收获:
mfc.h文件代码:

#include <iostream>

class CObject
{
public:
 CObject::CObject() { std::cout << "CObject Constructor \n"; }
 CObject::~CObject() { std::cout << "CObject Destructor \n"; }
};

class CCmdTarget : public CObject
{
public:
 CCmdTarget::CCmdTarget() { std::cout << "CCmdTarget Constructor \n"; }
 CCmdTarget::~CCmdTarget() { std::cout << "CCmdTarget Destructor \n"; }
};

class CWinThread : public CCmdTarget{
public:
 CWinThread::CWinThread() { std::cout << "CWinThread Constructor \n"; }
 CWinThread::~CWinThread() { std::cout << "CWinThread Destructor \n"; }
};

class CWinApp : public CWinThread{
public:
 CWinApp* m_pCurrentWinApp;
public:
 CWinApp::CWinApp() { m_pCurrentWinApp = this;std::cout << "CWinApp Constructor \n"; }
 CWinApp::~CWinApp() { std::cout << "CWinApp Destructor \n"; }
};

class CDocument : public CCmdTarget{
public:
 CDocument::CDocument(){ std::cout << "CDocument Constructor \n"; }
 CDocument::~CDocument() { std::cout << "CDocument Destructor \n"; }
};

class CWnd : public CCmdTarget{
public:
 CWnd::CWnd() { std::cout << "CWnd Constructor \n"; }
 CWnd::~CWnd() { std::cout << "CWnd Destructor \n"; }
};

class CFrameWnd : public CWnd{
public:
 CFrameWnd::CFrameWnd() { std::cout << "CFrameWnd Constructor \n"; }
 CFrameWnd::~CFrameWnd() { std::cout << "CFrameWnd Destructor \n"; }
};

class CView : public CWnd{
public:
 CView::CView() { std::cout << "CView Constructor \n"; }
 CView::~CView() { std::cout << "CView Destructor \n"; }
};

CWinApp* AfxGetApp();
my.h代码:

#include <iostream>
#include "mfc.h"
class CMyWinApp : public CWinApp{
public:
 CMyWinApp::CMyWinApp() { std::cout << "CMyWinApp Constructor \n"; }
 CMyWinApp::~CMyWinApp() { std::cout << "CMyWinApp Destructor \n"; }
};

class CMyFrameWnd : public CFrameWnd{
public:
 CMyFrameWnd() { std::cout << "CMyFrameWnd Constructor \n"; }
 ~CMyFrameWnd() { std::cout << "CMyFrameWnd Destructor \n"; }
};
mfc.cpp代码:
#include "my.h"
extern CMyWinApp theApp;
CWinApp* AfxGetApp(){
 return theApp.m_pCurrentWinApp;
}
my.cpp代码:

#include "my.h"

CMyWinApp theApp;
void main()
{
 CWinApp* pApp = AfxGetApp();
}

有兴趣的朋友先运行,如果有想知道输出结果的请看该篇文档后期的续(将在www.88doc.com上以点评方式给出)。