📄 my.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 + -