手写MFC----第四讲 BEGIN_MESSAGE_MAP

原创 2004年07月11日 21:45:00

首先看定义

#define BEGIN_MESSAGE_MAP(theClass, baseClass) /

         const AFX_MSGMAP* theClass::GetMessageMap() const /

                  { return &theClass::messageMap; } /

         AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = /

         { &baseClass::messageMap, &theClass::_messageEntries[0] }; /

         AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = /

         { /

实际应用BEGIN_MESSAGE_MAP(myview,CView)等价于

         const AFX_MSGMAP* myview::GetMessageMap() const /

                  { return & myview::messageMap; } /

         AFX_COMDAT AFX_DATADEF const AFX_MSGMAP myview::messageMap = /

         { & CView::messageMap, & myview::_messageEntries[0] }; /

         AFX_COMDAT const AFX_MSGMAP_ENTRY myview::_messageEntries[] = /

         { /

还有END_MESSAGE_MAPBEGIN_MESSAGE_MAP是成对出现的

#define END_MESSAGE_MAP() /

                   {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } /

         }; /

整个程序改成如下:

#include <afxwin.h>

#include <afxext.h>

#include "resource.h"

 

class mydoc:public CDocument

{

public:

                            static const CRuntimeClass  classmydoc;

                            virtual CRuntimeClass* GetRuntimeClass() const;

                            static CObject*  __stdcall  CreateObject();

                  

public :

         CString s;

         CPoint point;

         mydoc()

         {

                  s="Welcome to SDI";

                  point.x=250;

                  point.y=100;

         }

};

 

CObject* __stdcall mydoc::CreateObject()

{ return new mydoc; }

const  CRuntimeClass mydoc::classmydoc =

{

"mydoc", sizeof(class mydoc), 0xFFFF, mydoc::CreateObject,

(CRuntimeClass*)(& CDocument::classCDocument), NULL };

         CRuntimeClass* mydoc::GetRuntimeClass() const

{ return ((CRuntimeClass*)(& mydoc::classmydoc)); }

 

 

class myview:public CView

{

public:

         static const CRuntimeClass  classmyview;

         virtual CRuntimeClass* GetRuntimeClass() const;

         static CObject*  __stdcall  CreateObject();

public:

         void OnDraw(CDC *d)

         {

                   mydoc *b;

                  b=(mydoc *)m_pDocument;

                  d->SetTextColor(RGB(0,0,0)) ;

                  d->TextOut(b->point.x,b->point.y ,b->s) ;

                  

         }

        

         void OnLButtonDown(UINT nFlags,CPoint p)

         {

                   mydoc *b;

                  b=(mydoc*)m_pDocument;

                  b->point.x=p.x;

                  b->point.y=p.y;

                  Invalidate();

         }

        

private:

                             static const AFX_MSGMAP_ENTRY _messageEntries[];

protected:

                      static AFX_DATA const AFX_MSGMAP messageMap;

                      virtual const AFX_MSGMAP* GetMessageMap() const;

                     

                  

};

 

CObject* __stdcall myview::CreateObject()

{ return new myview; }

 

const  CRuntimeClass myview::classmyview =

{

         "myview", sizeof(class myview), 0xFFFF, myview::CreateObject,

                  (CRuntimeClass*)(& CView::classCView), NULL

};

CRuntimeClass* myview::GetRuntimeClass() const

{

         return ((CRuntimeClass*)(& myview::classmyview));

}

 

const AFX_MSGMAP* myview::GetMessageMap() const

{ return & myview::messageMap; }

 

 const AFX_MSGMAP myview::messageMap =

{ & CView::messageMap, & myview::_messageEntries[0] };

 

 const AFX_MSGMAP_ENTRY myview::_messageEntries[] =

{

 

         {

         WM_LBUTTONDOWN, 0, 0, 0, AfxSig_vwp,

         (AFX_PMSG)(AFX_PMSGW)(void (CWnd::*)(UINT, CPoint))&OnLButtonDown

         },

                  

  {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }

 

};

 

class zzz:public CWinApp

{

public:

         int InitInstance()

         {

                  CSingleDocTemplate *y;

                  CRuntimeClass *w,*d,*v;

                  d=(CRuntimeClass*)(&mydoc::classmydoc);

                  w=(CRuntimeClass*)(&CFrameWnd::classCFrameWnd);

                  v=(CRuntimeClass*)(&myview::classmyview);

                   y=new CSingleDocTemplate(IDR_MENU1,d,w,v);

                  AddDocTemplate(y);

                  OnFileNew();

                   return 1;

         }

};

 

zzz a;

 (全文完)

版权声明:本文为博主原创文章,未经博主允许不得转载。

手写MFC----第四讲 BEGIN_MESSAGE_MAP

首先看定义#define BEGIN_MESSAGE_MAP(theClass, baseClass) /         const AFX_MSGMAP* theClass::GetMessage...
  • xingshuqiang2009
  • xingshuqiang2009
  • 2011年01月24日 22:00
  • 166

MIT线性代数第四讲:LU分解

ALU分解 两个基本公式 LU分解 求L 行互换的情形 A=LU分解 A=LU分解是最基本的矩阵分解,L是指下三角矩阵,U是指上三角矩阵。U可以通过矩阵消元得到,那么L又...
  • qq_34535410
  • qq_34535410
  • 2018年01月27日 11:14
  • 33

MFC之MFC BEGIN_MESSAGE_MAP()

MFC BEGIN_MESSAGE_MAP() 1BEGIN_MESSAGE_MAP(CpassApp, CWinApp) 2 ON_COMMAND(ID_HELP, CWinApp:...
  • luoyeaijiao
  • luoyeaijiao
  • 2012年02月16日 15:57
  • 3168

C#精髓-- GridView 72般绝技

 C#精髓-- GridView 72般绝技作者:清清月儿 快速预览:GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单Drop...
  • lbh9158
  • lbh9158
  • 2007年06月04日 09:05
  • 8960

第三章 子网划分、变长子网掩码(VLSM)和TCP/IP

第三章 子网划分、变长子网掩码(VLSM)和TCP/IP 1、要创建子网,就需要从IP地址的主机部分中借出一定的位,并且保留他们用来定义子网地址 2、使用不同长度的子网掩码来了解一个网络或创建多个...
  • bluwin
  • bluwin
  • 2011年08月19日 11:07
  • 348

【线性代数公开课MIT Linear Algebra】 第四课 从矩阵消元到LU分解

本系列笔记为方便日后自己查阅而写,更多的是个人见解,也算一种学习的复习与总结,望善始善终吧~矩阵的逆与转置 为什么逆矩阵要反过来?这就像是…你先把鞋子脱了再脱袜子,那么反过来不就是要先穿上袜子,再...
  • a352611
  • a352611
  • 2015年09月23日 22:52
  • 1376

视觉slam14讲——第10讲后端1

本系列文章是记录学习高翔所著《视觉slam14讲》的内容总结,文中的主要文字和代码、图片都是引用自课本和高翔博士的博客。代码运行效果是在自己电脑上实际运行得出。手动记录主要是为了深入理解 涉及到的主...
  • qq_23225073
  • qq_23225073
  • 2017年12月12日 15:25
  • 125

C++中添加自定义消息的响应 (BEGIN_MESSAGE_MAP ON_MESSAGE)

  1首先要在窗口类的cpp文件手动添加消息响应机制,ON_MESSAGE(ID,Handler)  LRESULT   Handler(WPARAM,LPARAM);//响应的函数BEGIN_MES...
  • Jacky_Dai
  • Jacky_Dai
  • 2009年03月26日 16:45
  • 6405

手写MFC----第一节DECLARE_DYNCREATE(mydoc)

DECLARE_DYNCREATE(mydoc) 定义为 #define DECLARE_DYNCREATE(class_name) /          DECLARE_DYNAMIC(c...
  • zhoujiamurong
  • zhoujiamurong
  • 2004年07月11日 21:39
  • 5762

视觉slam14讲——第5讲 相机与图像

第5讲 相机与图像 相机模型 1 针孔相机模型 2 畸变 3 双目相机模型 4 RGBD相机模型 图像的存储和访问 1 图像的存储 2 图像的通道 3 opencv图像像素的遍历第5讲 相机与图像1 ...
  • qq_23225073
  • qq_23225073
  • 2017年10月25日 14:38
  • 148
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手写MFC----第四讲 BEGIN_MESSAGE_MAP
举报原因:
原因补充:

(最多只允许输入30个字)