⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my.cpp

📁 MFC的框架
💻 CPP
字号:
// my.cpp : Defines the entry point for the console application.
//

#include "my.h"

CMyWinApp theApp;	//global object

BOOL CMyWinApp::InitInstance()
{
	cout << "CMyWinApp::InitInstance \n";
	m_pMainWnd = new CMyFrameWnd;	//引发CMyFrameWnd::CMyFrameWnd构造函数
	return TRUE;
}

CMyFrameWnd::CMyFrameWnd()
{
	cout << "CMyFrameWnd Constructor\n";
	Create();		//Create是虚函数,但CMyFrameWnd未改写它,所以引发CMyFrameWnd::Create
}

BEGIN_MESSAGE_MAP(CMyWinApp, CWinApp)//将CWinApp的消息网作为CMyWinApp的基网
//等同于
//struct AFX_MSGMAP
//{
//	AFX_MSGMAP *pBaseMessageMap;
//	AFX_MSGMAP_ENTRY *lpEntries;
//};
//AFX_MSGMAP* CMyWinApp::GetMessageMap() const \
//        { return &CMyWinApp::messageMap; } \
//AFX_MSGMAP CMyWinApp::messageMap = \
//{ &(CWinApp::messageMap), \
//        (AFX_MSGMAP_ENTRY*) &(CMyWinApp::_messageEntries) }; \
//AFX_MSGMAP_ENTRY CMyWinApp::_messageEntries[] = \
//{
//#define END_MESSAGE_MAP() \
//        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
//};
ON_COMMAND(CMyWinAppid, 0)
//等同于
//{ WM_COMMAND, CN_COMMAND, (WORD)CMyWinAppid, (WORD)CMyWinAppid, AfxSigCmd_v, \
//	static_cast<AFX_PMSG> (0) },
END_MESSAGE_MAP()
//等同于
//#define END_MESSAGE_MAP() \
//        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }

////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)	//将CFrameWnd的消息网作为CMyFrameWnd的基网
//等同于
//struct AFX_MSGMAP
//{
//	AFX_MSGMAP *pBaseMessageMap;
//	AFX_MSGMAP_ENTRY *lpEntries;
//};
//AFX_MSGMAP* CMyFrameWnd::GetMessageMap() const \
//        { return &CMyFrameWnd::messageMap; } \
//AFX_MSGMAP CMyFrameWnd::messageMap = \
//{ &(CFrameWnd::messageMap), \
//        (AFX_MSGMAP_ENTRY*) &(CMyFrameWnd::_messageEntries) }; \
//AFX_MSGMAP_ENTRY CMyFrameWnd::_messageEntries[] = \
//{
//#define END_MESSAGE_MAP() \
//        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
//};
ON_COMMAND(CMyFrameWndid, 0)
//等同于
//{ WM_COMMAND, CN_COMMAND, (WORD)CMyFrameWndid, (WORD)CMyFrameWndid, AfxSigCmd_v, \
//	static_cast<AFX_PMSG> (0) },
END_MESSAGE_MAP()
//等同于
//#define END_MESSAGE_MAP() \
//        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }

//////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CMyDoc, CDocument)	//将CDocument的消息网作为CMyDoc的基网
//等同于
//struct AFX_MSGMAP
//{
//	AFX_MSGMAP *pBaseMessageMap;
//	AFX_MSGMAP_ENTRY *lpEntries;
//};
//AFX_MSGMAP* CMyDoc::GetMessageMap() const \
//        { return &CMyDoc::messageMap; } \
//AFX_MSGMAP CMyDoc::messageMap = \
//{ &(CDocument::messageMap), \
//        (AFX_MSGMAP_ENTRY*) &(CMyDoc::_messageEntries) }; \
//AFX_MSGMAP_ENTRY CMyDoc::_messageEntries[] = \
//{
//#define END_MESSAGE_MAP() \
//        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
//};
ON_COMMAND(CMyDocid, 0)
//等同于
//{ WM_COMMAND, CN_COMMAND, (WORD)CMyDocid, (WORD)CMyDocid, AfxSigCmd_v, \
//	static_cast<AFX_PMSG> (0) },
END_MESSAGE_MAP()
//等同于
//#define END_MESSAGE_MAP() \
//        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }

//////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CMyView, CView)	//将CView的消息网作为CMyView的基网
//等同于
//struct AFX_MSGMAP
//{
//	AFX_MSGMAP *pBaseMessageMap;
//	AFX_MSGMAP_ENTRY *lpEntries;
//};
//AFX_MSGMAP* CMyView::GetMessageMap() const \
//        { return &CMyView::messageMap; } \
//AFX_MSGMAP CMyView::messageMap = \
//{ &(CView::messageMap), \
//        (AFX_MSGMAP_ENTRY*) &(CMyView::_messageEntries) }; \
//AFX_MSGMAP_ENTRY CMyView::_messageEntries[] = \
//{
//#define END_MESSAGE_MAP() \
//        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
//};
ON_COMMAND(CMyViewid, 0)
//等同于
//{ WM_COMMAND, CN_COMMAND, (WORD)CMyViewid, (WORD)CMyViewid, AfxSigCmd_v, \
//	static_cast<AFX_PMSG> (0) },
END_MESSAGE_MAP()
//等同于
//#define END_MESSAGE_MAP() \
//        { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }

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);
    }
}

//-------------------------------
//main
//-------------------------------
void  main()
{
	cout << "\n";
	CWinApp *pApp = NULL;
	pApp = AfxGetApp();

	pApp->InitApplication();		//调用的是CWinApp::InitApplication
	cout << "\n";
	pApp->InitInstance();			//调用的是CMyWinApp::InitInstance(因为CMyWinApp改写了它)
	cout << "\n";
	pApp->Run();					//调用的是CWinApp::Run

	cout << "\n";
    CMyDoc* pMyDoc = new CMyDoc;
	cout << "\n";
    CMyView* pMyView = new CMyView;
	cout << "\n";
    CFrameWnd* pMyFrame = (CFrameWnd*)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 = pMyFrame->GetMessageMap();
    cout << endl << "CMyFrameWnd Message Map : " << endl;
    MsgMapPrinting(pMessageMap);

    pMessageMap = pApp->GetMessageMap();
    cout << endl << "CMyWinApp Message Map : " << endl;
    MsgMapPrinting(pMessageMap);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -