消息映射宏是怎么把消息和消息映射函数联系的??(详细说明,不要复制粘贴)

如题所述

是通过消息映射表_messageEntries来实现的
首先BEGIN_MESSAGE_MAP这个宏用来定义_messageEntries的表头
中间的消息是定义下面这种结构的表数据
struct AFX_MSGMAP_ENTRY
{
UINT nMessage; // windows message
UINT nCode; // control code or WM_NOTIFY code
UINT nID; // control ID (or 0 for windows messages)
UINT nLastID; // used for entries specifying a range of control id's
UINT nSig; // signature type (action) or pointer to message #
AFX_PMSG pfn; // routine to call (or special value)
};
END_MESSAGE_MAP宏用来定义表尾

最后,在消息循环中查询_messageEntries,看当前的消息是否需要处理用户代码
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-16
所谓的消息,就是一个数,当这个数传递到一个窗口程序的时候,窗口程序根据这个值调用对应的函数(这种对应关系就是消息映射,程序通过宏来说明这种对应关系),如果是你,你会怎么做?windows有windows的做法,如果你编写过状态迁移这样的程序结构,你就会明白其中的原理。
第2个回答  2012-08-16
很简单的,比如:ON_COMMAND(ID_HELP,&CwinApp::OnHlep)

MFC 消息映射原理是什么?
消息映射就是建立一个消息和函数的对应表,当收到消息时查找表,如果表中有相应的消息,就将消息交给相应的函数处理。通俗点讲,消息映射表就是一个记录了消息号和相应处理函数的数组。当然表中还有其他信息,这里先说矛盾的主要方面了。其中消息映射表中的每个元素都是一个结构体变量,他的成员很多,最...

消息映射机制什么是消息映射机制
每当窗口接收到一个消息,它会自动在消息映射表中查找匹配的消息,然后调用相应的处理函数进行相应的操作处理。在传统的SDK(Software Development Kit)编程模式中,开发者需要在窗口的生命周期中,通过逐一检查接收到的消息并进行处理。这种方式相对繁琐,需要程序员花费较多精力。而MFC的消息映射机制则显著简...

消息映射机制消息映射表
在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP这两个宏之间,定义了一系列的消息处理函数,比如:ON_WM_CREATE():处理创建(WM_CREATE)消息。ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize):响应定制(ID_VIEW_CUSTOMIZE)命令。ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::On...

...程序的步骤?消息映射如何实现?其和消息处理函数间的关系是什么?_百 ...
第一步,创建窗口类的时候,有一个参数,是设置消息处理函数的名称的(这么说不专业,应该叫消息处理函数指针),具体是哪个,你找下,那个参数赋值就是wndproc,就是你在第5步,进入消息循环的时候调用的函数。这个函数是程序员实现程序功能的地方。但是这个函数也一样的是一个格式很确定的函数。都是s...

什么是消息映射
简单地讲,消息映射就是把消息跟处理消息的函数一一对应起来,系统内部有一个结构体数组,每个结构体元素都放有消息的类型与对映的处理函数入口地址,这样系统可以跟据消息的类型或ID找到相应的函数处理程序进行处理.

什么是消息映射
OnViewScale,CScrollView::OnFilePrint 等都是处理函数名字。 详细的处理函数 写在 CXxxView里。 --- 事件驱动程序,主程序里有个总循环,不断检查事件是否发生,一旦发生就查映射表,调处理函数处理,处理完,清掉这条消息,再回总循环。直到收到结束通知。 问题二:在mfc中什么是消息映射表? BEGIN_MESSAGE_...

VC++的MFC中关于消息映射,BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间...
前面的afx_msg void OnPaint();只是声明OnPaint()函数是一个消息处理函数,然后是OnPaint()函数的定义,但是函数定义在那儿是不会自己去执行的,ON_WM_PAINT()宏是一个系统消息映射,告诉系统当有WM_PAINT消息的时候,调用OnPaint()函数进行处理,如果没有这句话,消息队列收到WM_PAINT消息的时候不...

基于MFC在DLL中继承CWnd类后的调用问题
消息映射是一个将消息和成员函数相互关联的表,当应用程序的框架窗口接收到一个消息时,MFC将搜索该窗口的消息映射,如果存在一个处理消息的处理程序,那么就调用该处理程序.它通过宏来实现消息到成员函数的映射,而且这些函数不必是虚拟的成员函数,这样不需要为消息映射函数生成一个很大的虚拟函数表(V表),节省内存。 MFC...

消息反射的消息反射的基础知识
}分析:首先,调用ReflectLastMsg(hCtrlChildWnd,...)给子窗口一个自身处理的机会,将消息反射给子窗口处理,函数返回TRUE,表明子窗口处理了此消息。反之,表示子窗口未处理此消息,此时,调用OnCmdMsg(...)由父窗口进行通常的处理。2、ReflectLastMsg中:主要是调用发送窗口的SendChildNotifyLastMsg(....

消息和事件的区别 VC++解惑
首先要明确VC++中使用消息映射技术处理“消息”和“事件” ,通过DECLARE_MESSAGE_MAP()等宏通杀 事件就是“当...的时候”,事件总是和一个ID有关 消息就是“嗨!你该干...了” ,VS2005以上的“消息”标签中就是VC6 Windows Messages Handler中的内容 我们一般都是在 "当...的时候" 干 XXX...

相似回答