stdafx
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
mfc.h
#include "afxmsg_.h"
#define TRUE 1
#define FALSE 0
typedef char * LPSTR;
typedef const char * LPCSTR;
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef int INT;
typedef unsigned int UINT;
typedef long LONG;
#define WM_COMMAND 0x0111
#define CObjectid 0xffff
#define CCmdTargetid 1
#define CWinThreadid 11
#define CWinAppid 111
#define CMyWinAppid 1111
#define CWndid 12
#define CFrameWndid 121
#define CMyFrameWndid 1211
#define CViewid 122
#define CMyViewid 1221
#define CDocumentid 13
#define CMyDocid 131
struct AFX_MSGMAP_ENTRY;
struct AFX_MSGMAP
{
AFX_MSGMAP *pBaseMessageMap;
AFX_MSGMAP_ENTRY * lpEntries;
};
#define DECLARE_MESSAGE_MAP()\
static AFX_MSGMAP_ENTRY _messageEntries[];\
static AFX_MSGMAP messageMap;\
virtual AFX_MSGMAP * GetMessageMap() const;
#define BEGIN_MESSAGE_MAP(theClass,baseClass1)\
AFX_MSGMAP* theClass::GetMessageMap() const\
{ return &theClass::messageMap;}\
AFX_MSGMAP theClass::messageMap={ &(baseClass1::messageMap),(AFX_MSGMAP_ENTRY*)&(theClass::_messageEntries)};\
AFX_MSGMAP_ENTRY theClass::_messageEntries[]={
#define END_MESSAGE_MAP()\
{ 0,0,0,0,AfxSig_end,(AFX_PMSG)0} };
class CObject
{
public:
CObject();
};
class CCmdTarget:public CObject
{
public:
DECLARE_MESSAGE_MAP(CCmdTarget)
};
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
{
public:
virtual BOOL InitInstance();
virtual int Run();
};
class CWnd;
class CWinApp:public CWinThread
{
public:
CWinApp();
CWinApp * m_pCurrentWinApp;
CWnd * m_pMainWnd;
virtual BOOL InitApplication();
virtual BOOL InitInstance();
virtual int Run();
DECLARE_MESSAGE_MAP()
};
typedef void (CWnd::*AFX_PMSGW)(void);
//like AFX_PMSG but for CWnd derived classes only ????????????
class CWnd:public CCmdTarget
{
public:
virtual BOOL Create();
BOOL CreateEx();
virtual BOOL PreCreateWindow();
DECLARE_MESSAGE_MAP()
};
class CFrameWnd:public CWnd
{
public:
BOOL Create();
virtual BOOL PreCreateWindow();
DECLARE_MESSAGE_MAP()
};
class CView:public CWnd
{
public:
DECLARE_MESSAGE_MAP()
};
class CDocument:public CCmdTarget
{
public:
DECLARE_MESSAGE_MAP()
};
mfc.cpp
#include "stdafx.h"
#include "MFC.h"
CObject::CObject()
{
}
BOOL CWinThread::InitInstance()
{
cout<<"CWinThread::InitInstance"<<endl;
return TRUE;
}
int CWinThread::Run()
{
cout<<"CWinThread::Run"<<endl;
return 1;
}
CWinApp::CWinApp()
{
m_pCurrentWinApp=this;
}
BOOL CWinApp::InitApplication()
{
cout<<"CWinApp::InitApplication"<<endl;
return TRUE;
}
BOOL CWinApp::InitInstance()
{
cout<<"CWinApp::InitInstance"<<endl;
return TRUE;
}
int CWinApp::Run()
{
cout<<"CWinApp::Run"<<endl;
return 1;
}
BOOL CWnd::Create()
{
cout<<"CWnd::Create"<<endl;
CreateEx();
return TRUE;
}
BOOL CWnd::CreateEx()
{
cout<<"CWnd::CreateEx"<<endl;
PreCreateWindow();
return TRUE;
}
BOOL CWnd::PreCreateWindow()
{
cout<<"CWnd::PreCreateWindow"<<endl;
return TRUE;
}
BOOL CFrameWnd::Create()
{
cout<<"CFrameWnd::Create"<<endl;
CreateEx();
return TRUE;
}
BOOL CFrameWnd::PreCreateWindow()
{
cout<<"CFrameWnd::PreCreateWindow"<<endl;
return TRUE;
}
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.h
#include "stdafx.h"
#include "MFC.h"
class CMyWinApp:public CWinApp
{
public:
virtual BOOL InitInstance();
DECLARE_MESSAGE_MAP()
};
class CMyFrameWnd:public CFrameWnd
{
public:
CMyFrameWnd();
DECLARE_MESSAGE_MAP()
};
class CMyDoc:public CDocument
{
public:
DECLARE_MESSAGE_MAP()
};
class CMyView:public CView
{
public:
DECLARE_MESSAGE_MAP()
};
void printlpEntries(AFX_MSGMAP_ENTRY * lpEntry);
void MsgMapPrinting(AFX_MSGMAP *pMessageMap);
#include "stdafx.h"
#include "MY.h"
BOOL CMyWinApp::InitInstance()
{
cout<<"CMyWinApp::InitInstance"<<endl;
m_pMainWnd=new CMyFrameWnd;
return TRUE;
}
CMyFrameWnd::CMyFrameWnd()
{
Create();
}
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(CMyDoc,CDocument)
ON_COMMAND(CMyDocid,0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyView,CView)
ON_COMMAND(CMyViewid,0)
END_MESSAGE_MAP()
void printlpEntries(AFX_MSGMAP_ENTRY * lpEntry)
{
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==lpEntry->nID)
{
cout<<lpEntry->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);
}
}
afxmsg_.h
enum AfxSig
{
AfxSig_end=0,
AfxSig_vv,
};
#define ON_COMMAND(id,memberFxn)\
{WM_COMMAND,0,(WORD)id,(WORD)id,AfxSig_vv,(AFX_PMSG)memberFxn },