};
typedef void (CCmdTarget::*AFX_PMSG)(void);
struct AFX_MSGMAP_ENTRY
{
UINT nMessage;
UINT nCode;
UINT nID;
UINT nLastID;
UINT nSig;
AFX_PMSG pfn;
};
class CWinThread : public CCmdTarget
{
/*DECLARE_DYNAMIC(CWinThread)*/
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
{
/*DECLARE_DYNAMIC(CWinApp)*/
public:
DECLARE_MESSAGE_MAP()
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(); }
};
typedef void (CWinApp::*AFX_PMSGW)(void);
class CDocument : public CCmdTarget
{
/*DECLARE_DYNAMIC(CDocument)*/
public:
DECLARE_MESSAGE_MAP()
public:
CDocument::CDocument() { }
CDocument::~CDocument() { }
};
class CWnd : public CCmdTarget
{
/*DECLARE_DYNCREATE(CWnd)*/
public:
DECLARE_MESSAGE_MAP()
public:
CWnd::CWnd() { /*cout << "CWnd Constructor /n";*/ }
CWnd::~CWnd() { }
virtual BOOL Create();
BOOL CreateEx();
virtual BOOL PreCreateWindow();
//void SayHello() { cout << "这里是CWnd类 /n"; }
};
class CFrameWnd : public CWnd
{
/*DECLARE_DYNCREATE(CFrameWnd)*/
public:
DECLARE_MESSAGE_MAP()
public:
CFrameWnd::CFrameWnd() { /*cout << "CFrameWnd Constructor /n";*/ }
CFrameWnd::~CFrameWnd() { }
virtual BOOL Create();
virtual BOOL PreCreateWindow();
//void SayHello() { cout << "这里是CFrameWnd类 /n"; }
};
class CView : public CWnd
{
/*DECLARE_DYNAMIC(CView)*/
public:
DECLARE_MESSAGE_MAP()
public:
CView::CView() { }
CView::~CView() { }
};
//GLOBAL FUNC
CWinApp* AfxGetApp();
//-------------------------------------------------------------------
// MY.H
//-------------------------------------------------------------------
#include <iostream>
#include "MFC.h"
class CMyWinApp : public CWinApp
{
public:
DECLARE_MESSAGE_MAP()
public:
CMyWinApp::CMyWinApp() { }
CMyWinApp::~CMyWinApp() { }
virtual BOOL InitInstance();
};
class CMyFrameWnd : public CFrameWnd
{
/*DECLARE_DYNCREATE(CMyFrameWnd)*/
public:
DECLARE_MESSAGE_MAP()
public:
CMyFrameWnd::CMyFrameWnd();
CMyFrameWnd::~CMyFrameWnd() { }
//void sayHello() { cout << "这里是CMyFrameWnd类 /n"; }
};
class CMyDoc : public CDocument
{
/*DECLARE_DYNCREATE(CMyDoc)*/
public:
DECLARE_MESSAGE_MAP()
public:
CMyDoc::CMyDoc() { /*cout << "CMyDoc constructor /n";*/}
CMyDoc::~CMyDoc() { }
//void sayHello() { cout << "这里是CMyDoc类 /n"; }
};
class CMyView : public CView
{
/*DECLARE_DYNCREATE(CMyView)*/
public:
DECLARE_MESSAGE_MAP()
public:
CMyView::CMyView() { /*cout << "CMyView constructor /n";*/ }
CMyView::~CMyView() { }
//void sayHello() { cout << "这里是CMyView类 /n"; }
};
//global function
//void AfxprintAllClasses();
//-------------------------------------------------------------------
// AFXMSG_.H
//-------------------------------------------------------------------
enum AfxSig_end
{
AfxSig_end = 0,
AfxSig_vv,
};
#define ON_COMMAND(id, memberFxn) /
{ WM_COMMAND, 0, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)memberFxn },
//-------------------------------------------------------------------
// MFC.CPP
//-------------------------------------------------------------------
#include "my.h"
extern CMyWinApp theApp;
//static char szCObject[] = "CObject";
//struct CRuntimeClass CObject::classCObject = { szCObject, sizeof(CObject),65535,NULL, NULL, NULL};
//static AFX_CLASSINIT _init_CObject(&CObject::classCObject);
//
//CRuntimeClass* CRuntimeClass::pFirstClass = NULL;
//
//AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass* pNewClass)
//{
// pNewClass->m_pNextClass = CRuntimeClass::pFirstClass;
// CRuntimeClass::pFirstClass = pNewClass;
//}
//
//CObject* CRuntimeClass::CreateObject()
//{
// if (m_pfnCreateObject == NULL)
// {
// TRACE1("错误:试图创建的对象不存在:%hs./n",m_lpszClassName);
// return NULL;
// }
// CObject* pObject = NULL;
// pObject = (*m_pfnCreateObject)();
// return pObject;
//}
//
//CRuntimeClass* PASCAL CRuntimeClass::Load()
//{
// char szClassName[64];
// CRuntimeClass* pClass;
// cout << " 输入一个类名" ;
// cin >> szClassName;
// for(pClass = pFirstClass;pClass!=NULL;pClass=pClass->m_pNextClass)
// {
// if (strcmp(szClassName, pClass->m_lpszClassName)==0)
// return pClass;
// }
// TRACE1("错误:没有找到匹配的类:%s /n",szClassName);
// return NULL;
//}
//
//CRuntimeClass* CObject::GetRuntimeClass()const
//{
// return &CObject::classCObject;
//}
//
//BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
//{
// CRuntimeClass* pClassThis = GetRuntimeClass();
// while (pClassThis!=NULL)
// {
// if (pClassThis==pClass)
// {
// return TRUE;
// }
// pClassThis = pClassThis->m_pBaseClass;
// }
// return FALSE;
//}
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;
}
//IMPLEMENT_DYNMIC(CCmdTarget, CObject)
//IMPLEMENT_DYNMIC(CWinThread, CCmdTarget)
//IMPLEMENT_DYNMIC(CWinApp, CWinThread)
//IMPLEMENT_DYNMIC(CDocument, CCmdTarget)
//IMPLEMENT_DYNCREATE(CWnd, CCmdTarget)
//IMPLEMENT_DYNMIC(CView, CWnd)
//IMPLEMENT_DYNCREATE(CFrameWnd, CWnd)
AFX_MSGMAP* CCmdTarget::GetMessageMap() const
{
return &CCmdTarget::messageMap;
}
AFX_MSGMAP CCmdTarget::messageMap =
{
NULL,
&CCmdTarget::_messageEntries[0]
};
AFX_MSGMAP_ENTRY CCmdTarget::_messageEntries[] =
{
{0, 0, CCmdTargetid, 0, AfxSig_end, 0 }
};
BEGIN_MESSAGE_MAP(CWnd, CCmdTarget)
ON_COMMAND(CWndid, 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CFrameWnd, CWnd)
ON_COMMAND(CFrameWndid, 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CDocument, CCmdTarget)
ON_COMMAND(CDocumentid, 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CView, CWnd)
ON_COMMAND(CViewid, 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CWinApp, CCmdTarget)
ON_COMMAND(CWinAppid, 0)
END_MESSAGE_MAP()
//-------------------------------------------------------------------
// MY.CPP
//-------------------------------------------------------------------
#include "MY.h"
CMyWinApp theApp;
BOOL CMyWinApp::InitInstance()
{
cout << "CMyWinApp::InitInstance() /n";
m_pMainWnd = new CMyFrameWnd;
return TRUE;
}
CMyFrameWnd::CMyFrameWnd()
{
//cout << "CMyDoc constructor /n";
Create();
}
//IMPLEMENT_DYNCREATE(CMyFrameWnd,CFrameWnd)
//IMPLEMENT_DYNCREATE(CMyDoc,CDocument)
//IMPLEMENT_DYNCREATE(CMyView,CView)
BEGIN_MESSAGE_MAP(CMyWinApp, CWinApp)
ON_COMMAND(CMyWinAppid, 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_COMMAND(CMyFrameWndid, 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(CMyViewid, 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyDoc, CDocument)
ON_COMMAND(CMyDocid, 0)
END_MESSAGE_MAP()
void printlpEntries(AFX_MSGMAP_ENTRY* lpEntrt)
{
struct {
int classid;
char* classname;
} classinfo[] = {
CCmdTargetid, "CCmdTarget",
CWinThreadid, " CWinThread",
CWinAppid, "CWinApp",
CMyWinAppid, "CMyWinApp",
CWndid, "CWnd",
CFrameWndid, "CFrameWnd",
CMyFrameWndid, "CMyFrameWnd",
CViewid, "CView",
CMyViewid, "CMyView",
CDocumentid, "CDocument",
CMyDocid, "CMyDoc",
0, ""
};
for (int i = 0; classinfo[i].classid!=0; i++)
{
if (classinfo[i].classid == lpEntrt->nID)
{
cout << lpEntrt->nID << " ";
cout << classinfo[i].classname << endl;
break;
}
}
}
void MsgMapPrinting(AFX_MSGMAP* pMessageMap)
{
for (; pMessageMap!=NULL; pMessageMap=pMessageMap->pBaseMessageMap)
{
AFX_MSGMAP_ENTRY* lpEntry = pMessageMap->lpEntries;
printlpEntries(lpEntry);
}
}
//void PrintAllClasses()
//{
// CRuntimeClass* pClass;
// for (pClass = CRuntimeClass::pFirstClass; pClass!=NULL; pClass = pClass->m_pNextClass)
// {
// cout<<pClass->m_lpszClassName<<endl;
// cout<<pClass->m_nObjectSize<<endl;
// cout<<pClass->m_wSchema<<endl;
// }
//}
//-------------------------------------------------------------------
// main
//-------------------------------------------------------------------
void main()
{
CWinApp* pApp = AfxGetApp();
pApp->InitApplication();
pApp->InitInstance();
pApp->Run();
CMyDoc* pMyDoc = new CMyDoc;
CMyView* pMyView = new CMyView;
CMyFrameWnd* pMyFrameWnd = (CMyFrameWnd*)pApp->m_pMainWnd;
// output Message Map construction
AFX_MSGMAP* pMessageMap = pMyView->GetMessageMap();
cout << endl << "CMyView Message Map : " << endl;
MsgMapPrinting(pMessageMap);
pMessageMap = pMyDoc->GetMessageMap();
cout << endl << "CMyDoc Message Map : " << endl;
MsgMapPrinting(pMessageMap);
pMessageMap = pMyFrameWnd->GetMessageMap();
cout << endl << "CMyFrameWnd Message Map : " << endl;
MsgMapPrinting(pMessageMap);
pMessageMap = pApp->GetMessageMap();
cout << endl << "CMyWinApp Message Map : " << endl;
MsgMapPrinting(pMessageMap);
//CRuntimeClass* pClassRef;
//CObject* pOb;
//while (1)
//{
// if ((pClassRef = CRuntimeClass::Load())== NULL)
// {
// break;
// }
// pOb = pClassRef->CreateObject();
// if (pOb!=NULL)
// {
// pOb->SayHello();
// }
//}
}
CWinApp::InitApplication()
CMyWinApp::InitInstance()
CFrameWnd::Create()
CWnd::CreateEx()
CFrameWnd::PreCreateWindow()
CWinApp::Run()
CWinThread::Run()
CMyView Message Map :
1221 CMyView
122 CView
12 CWnd
1 CCmdTarget
CMyDoc Message Map :
131 CMyDoc
13 CDocument
1 CCmdTarget
CMyFrameWnd Message Map :
1211 CMyFrameWnd
121 CFrameWnd
12 CWnd
1 CCmdTarget
CMyWinApp Message Map :
1111 CMyWinApp
111 CWinApp
1 CCmdTarget
请按任意键继续. . .