先列出类的层次:
以下代码,模拟MFC运行的类,纯是一个玩具程序,主要是为后面的技术服务,作一个基础。
/******************************************************************** created: 2010-7-13 22:40 filename: MFC.h author: luis purpose: *********************************************************************/ #pragma once typedef long BOOL; #define FALSE 0 #define TRUE 1 #define NULL 0 #include <iostream> using namespace std; class CObject { public: CObject::CObject() { } CObject::~CObject() { } }; class CCmdTarget : public CObject { public: CCmdTarget::CCmdTarget() { } CCmdTarget::~CCmdTarget() { } }; class CWinThread : public CCmdTarget { public: CWinThread::CWinThread() { } CWinThread::~CWinThread() { } virtual BOOL InitInstance() { cout << "CWinThread::InitInstance /n"; return TRUE; } virtual int Run() { cout << "CWinThread::Run /n"; return 1; } }; class CWnd; class CWinApp : public CWinThread { public: CWinApp* m_pCurrentWinApp; CWnd* m_pMainWnd; public: CWinApp::CWinApp() { m_pCurrentWinApp = this; } CWinApp::~CWinApp() { } virtual BOOL InitApplication() {cout << "CWinApp::InitApplication /n";return TRUE;} virtual BOOL InitInstance() {cout << "CWinApp::InitInstance /n";return TRUE;} virtual int Run() { cout << "CWinApp::Run /n"; return CWinThread::Run(); } }; class CDocument : public CCmdTarget { public: CDocument::CDocument() { } CDocument::~CDocument() { } }; class CWnd : public CCmdTarget { public: CWnd::CWnd() { } CWnd::~CWnd() { } virtual BOOL Create(); BOOL CreateEx(); virtual BOOL PreCreateWindow(); }; class CFrameWnd : public CWnd { public: CFrameWnd::CFrameWnd() { } CFrameWnd::~CFrameWnd() { } BOOL Create(); virtual BOOL PreCreateWindow(); }; class CView : public CWnd { public: CView::CView() { } CView::~CView() { } }; // global function CWinApp* AfxGetApp(); /******************************************************************** created: 2010-7-13 23:02 filename: MFC.cpp author: luis purpose: *********************************************************************/ #include "StdAfx.h" #include "MFC.h" #include "my.h" // 原本含入mfc.h 就好,但為了CMyWinApp 的定義,所以... extern CMyWinApp theApp; BOOL CWnd::Create() { cout << "CWnd::Create /n"; return TRUE; } BOOL CWnd::CreateEx() { cout << "CWnd::CreateEx /n"; PreCreateWindow(); return TRUE; } BOOL CWnd::PreCreateWindow() { cout << "CWnd::PreCreateWindow /n"; return TRUE; } BOOL CFrameWnd::Create() { cout << "CFrameWnd::Create /n"; CreateEx(); return TRUE; } BOOL CFrameWnd::PreCreateWindow() { cout << "CFrameWnd::PreCreateWindow /n"; return TRUE; } CWinApp* AfxGetApp() { return theApp.m_pCurrentWinApp; } /******************************************************************** created: 2010-7-13 23:02 filename: MY.h author: luis purpose: *********************************************************************/ #pragma once #include "mfc.h" class CMyWinApp : public CWinApp { public: CMyWinApp::CMyWinApp() { } CMyWinApp::~CMyWinApp() { } virtual BOOL InitInstance(); }; class CMyFrameWnd : public CFrameWnd { public: CMyFrameWnd(); ~CMyFrameWnd() { } }; /******************************************************************** created: 2010-7-13 23:02 filename: MY.cpp author: luis purpose: *********************************************************************/ #include "StdAfx.h" #include "MY.h" CMyWinApp theApp; // global object BOOL CMyWinApp::InitInstance() { cout << "CMyWinApp::InitInstance /n"; m_pMainWnd = new CMyFrameWnd; return TRUE; } CMyFrameWnd::CMyFrameWnd() { cout << "CMyFrameWnd::CMyFrameWnd /n"; Create(); } //--------------------------------------------------------------- // main //--------------------------------------------------------------- void main() { CWinApp* pApp = AfxGetApp(); pApp->InitApplication(); pApp->InitInstance(); pApp->Run(); }