深入浅出MFC Message Mapping 消息映射
来源:互联网 发布:上海晓通网络 编辑:程序博客网 时间:2024/05/21 18:35
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 0typedef 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 131struct 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 },
0 0
- 深入浅出MFC Message Mapping 消息映射
- MFC中的消息映射(Message Mapping)
- 消息映射--Message Mapping
- 《深入浅出MFC》——消息映射(Message Map)的雏形
- MFC深入浅出--消息映射
- MFC深入浅出--消息映射
- Message Mapping(消息映射)(转)
- MFC学习笔记五——消息映射(Message Mapping)
- MFC深入浅出之消息映射
- 第五章Windows Message Mapping Windows 消息映射(上)
- 第五章Windows Message Mapping Windows 消息映射(下)
- 深入浅出MFC---Frame7(消息映射)
- MFC 消息映射 消息传递MESSAGE_MAP 读深入浅出MFC感悟
- 深入浅出MFC学习笔记2--消息映射和消息路由
- MFC深入浅出之四消息映射的实现-李进久
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之消息映射和消息流动
- 深入浅出MFC:消息路由
- Message Mapping ---- Imitate from Inside MFC
- 体验Android Studio 1.0稳定版
- 【springMVC】之静态文件访问
- Struts2<6>国际化
- oracle 发送带附件邮件(smtp)
- C#性能优化集锦
- 深入浅出MFC Message Mapping 消息映射
- 解决IIS7.0部署文件在 windows 2008 R2 64位C盘中无法注册问题
- 一个只能读26个英文单词的android学习之路(一)
- Robot之Variable table部分
- 奇异值分解(SVD)
- Linux下的硬件驱动——USB设备(上)(驱动配置部分)
- Pull解析例子
- Maven(二):入门项目
- 为什么使用jquery 的submit()方法不能提交表单?