现在的位置: 首页 > 综合 > 正文

MFC六大关键技术之模拟

2017年12月07日 ⁄ 综合 ⁄ 共 3308字 ⁄ 字号 评论关闭

先列出类的层次:

testmfc

以下代码,模拟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();
}

抱歉!评论已关闭.