什么是消息映射

如题所述

第1个回答  2022-10-06
问题一:什么是消息映射?它的作用是什么? 消息映射简单来说 就是一张表, 面有两列,一列是 “消息”名称,另一列是 “处理函数”名字。
它的作用是,当 甲事件发生,消息甲 到达,查映射表,找出 消息甲 对应的 处理函数,
调用 此 处理函数处理。
其它 事件发生,有相应消息到达,查映射表,找出处理函数,处理。

例如下面就是一张CXxxView 里的 消息(MESSAGE)映射(MAP)表:
BEGIN_MESSAGE_MAP(CXxxView, CScrollView) 映射表开始

AFX_MSG_MAP(CXxxView)
ON_MAND(ID_VIEW_SCALE, OnViewScale)
ON_MAND(ID_VIEW_CHOSE_CH, OnViewChoseCh)
ON_MAND(ID_VIEW_SETAXES, OnViewSetaxes)
}}AFX_MSG_MAP
Standard printing mands
ON_MAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_MAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_MAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP() 映射表结束
---
ID_VIEW_SCALE,ID_VIEW_CHOSE_CH,ID_FILE_PRINT 等都是消息,都是揿了不同对话框的 OK 钮 产生的 消息。OnViewScale,CScrollView::OnFilePrint 等都是处理函数名字。
详细的处理函数 写在 CXxxView里。
---
事件驱动程序,主程序里有个总循环,不断检查事件是否发生,一旦发生就查映射表,调处理函数处理,处理完,清掉这条消息,再回总循环。直到收到结束通知。

问题二:在mfc中什么是消息映射表? BEGIN_MESSAGE_MAP(CCH372_CPlusDlg, CDialog)
ON_WM_SYSMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
}}AFX_MSG_MAP
ON_BN_CLICKED(IDCANCEL, &CCH372_CPlusDlg::OnBnClickedCancel)
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
这样就是一个工程叫CCH372_CPlusDlg的消息映射表,它以BEGIN_MESSAGE_MAP开始,END_MESSAGE_MAP()结尾,你在工程的.cpp文件中能找到。
}}AFX_MSG_MAP这句话上面的是系统自动加的,它下面的代码是人工或是用classwizard添加的
ON_BN_CLICKED(IDCANCEL, &CCH372_CPlusDlg::OnBnClickedCancel)
看这个消息映射,BN是button,消息类型为按钮单击,按钮ID:IDCANCEL,消息响应:OnBnClickedCance
ON_WM_ERASEBKGND()
WM是window message,一个窗口消息,这个消息是WM_ERASEBKGND,这种消息它的消息响应函数的名字是特定的,所以在这不用以显视的形式给出

问题三:菜单的映射消息分为哪几类?作用是什么 消息映射简单来说 就是一张表, 上面有两列,一列是 “消息”名称,另一列是 “处理函数”名字。 它的作用是,当 甲事件发生,消息甲 到达,查映射表,找出 消息甲 对应的 处理函数, 调用 此 处理函数处理。 其它 事件发生,有相应消息到达,查映射...

问题四:消息映射和消息回调有什么区别 消息映射是把消息与回调函数关联起来
例如ON_MAND(id_DataAccess, OnDataAccess)
它会告诉系统消息的产生者是id_DataAccess,消息的类型是MAND,消耿的回调函数是OnDataAccess
消息回调就是调用回调函数,MFC响应消息的机制都是以回调函数的形式进行的,这就要求你在定制消息时有几步必需做的步骤
1.定义消息
2.消息映射
3.消息响应声明
4.消息响应函数的实现
消息响应就是回调函数,这些在孙鑫老师的视频中都有提到

问题五:MFC的消息映射有什么作用 消息映射简单来说 就是一张表, 上面有两列,一列是 “消息”名称,另一列是 “处理函数”名字。
它的作用是,当 甲事件发生,消息甲 到达,查映射表,找出 消息甲 对应的 处理函数,
调用 此 处理函数处理。
其它 事件发生,有相应消息到达,查映射表,找出处理函数,处理。

例如下面就是一张CXxxView 里的 消息(MESSAGE)映射(MAP)表:
BEGIN_MESSAGE_MAP(CXxxView, CScrollView) 映射表开始

AFX_MSG_MAP(CXxxView)
ON_MAND(ID_VIEW_SCALE, OnViewScale)
ON_MAND(ID_VIEW_CHOSE_CH, OnViewChoseCh)

问题六:菜单的映射消息分为哪几类?作用是什么意思? 两类,
一类是 MAND消息,也就是点击消息
一类是UPDATE消息,更新菜单状态的

问题七:写出消息映射,类型识别,类的动态创建的思想 实体框架生成一个从ObjectContext派生的类,该类表示概念模型中的实体容器。(该派生类的名称即是概念模型文件中的EntityContainer的名称。)该类公开SaveChanges方法,该方法触发对基础数据库的更新。这些更新操作可以使用系统自动生成的SQL语句(默认),也可以使用开发人员所指定的存储过程。无论是否使用存储过程来更新数据库,用于创建、更新和删除实体的应用程序代码都是一样的。注意:如果没有将实体类型的插入、更新或删除这三种操作全部映射到存储过程,则在运行时执行的情况下未映射的操作将失败且会引发UpdateException。下面的过程假定您已在实体设计器中打开一个.edmx文件。将插入操作映射到存储过程将插入操作映射到存储过程在实体设计器图面上或在“模型浏览器”窗口中,右击要映射插入操作的实体类型,然后选择“存储过程映射”。此时将出现“映射详细信息”窗口的“将实体映射到函数”视图。单击“”。在下拉列表中选择插入操作要映射到的存储过程。窗口中填充的是实体属性与存储过程参数之间的默认映射。通过单击相应属性字段并从下拉列表中选择适当属性,修改每个存储过程参数对应的映射。注意:所有实体键都必须具有映射。如果存储过程使用INSERT语句,则实体键通常映射到插入新行时创建的主键。下面几个步骤介绍如何将存储过程返回的数据映射到实体属性。单击“”。该字段即变为可编辑状态。键入包含存储过程返回的数据的参数名称。单击对应于参数名称的属性字段。该字段将变成一个下拉属性列表。选择返回的数据要映射到的属性。注意:对于整数值输出参数,“受影响的行数参数”复选框处于启用状态。如果在调用插入操作时针对某参数选中该复选框且返回的值为零,将引发OptimisticConcurrencyException。对每个返回值和未映射属性重复步骤5到8。现在,所选实体类型的插入操作已映射到存储过程。将更新操作映射到存储过程将更新操作映射到存储过程在实体设计器图面上或在“模型浏览器”窗口中,右击要映射插入操作的实体类型,然后选择“存储过程映射”。此时将出现“映射详细信息”窗口的“将实体映射到函数”视图。单击“”。在下拉列表中选择更新操作要映射到的存储过程。窗口中填充的是实体属性与存储过程参数之间的默认映射。通过单击相应属性字段并从下拉列表中选择适当属性,修改每个存储过程参数对应的映射。对于每个属性,都可以选中在“使用原始值”[UseOriginalValue]列中的复选框。通过“使用原始值”[UseOriginalValue]选项,可以使用并发控制。如果选中某个属性的“使用原始值”[UseOriginalValue]选项,则从数据库读取的该属性的值将传递给指定的存储过程参数。请注意,属性的原始值和当前值都可以传递给不同的参数。注意:映射更新操作时,可以将存储过程返回的数据映射到实体属性。下面几个步骤介绍如何将存储过程返回的数据映射到实体属性。单击“”。该字段即变为可编辑状态。键入包含存储过程返回的数据的参数名称。单击对应于参数名称的属性字段。在下拉列表中选择返回的数据要映射到的属性。注意:对于整数值输出参数,“受影响的行数参数”复选框处于启用状态。如果在调用更新操作时针对某参数选中该复选框且返回的值为零,将引发OptimisticConcurrencyException。可以选择对每个返回值重复步骤6到9。现在,所选实体类型的更新操作已映射到存储过程。将删除操作映射到存储过程将删除操作映射到存储过程在实体设计器图面上或在“模型浏览器”窗口中,右击要映射......>>

问题八:在C++中的消息映射里面 当控件滚动条竖着滚动 ON_W储_VSCROLL()
当控件滚动条横着滚动 ON_WM_VSCROLL()
就是滚动条滚动 触发的事件~楼上的 都是正确的~

问题九:MFC里的消息映射具体是怎么实现的?命令消息和一般消息有什么区别? 通过一系列的宏定义如DECLARE_MESSAGE_MAP,建立了一个类别型录网。如果是一般消息,消息的路由是骸着父类这条线找到消息响应函数。如果是命令消息,有特定的消息路由。
建议你读一读侯俊杰(侯捷)写的《深入浅出MFC》。

问题十:MFC的消息映射机制是利用什么来定义消息映射的 1、消息类别的判定就是利用了一个普通的数组,遍历查找来实现消息映射的。
2、但同一个应用程序的哪个消息发送到哪个窗口,利用了复杂的数据结构,如哈希表,以便实现最快速的窗口查找。(详情见 CWnd 类)
3、每个消息映射到相应的处理函数,是通过C++的虚函数,还有把相应的函数地址(就是函数名)保存在消息映射表
BEGIN_MESSAGE_MAP(主类名,父类名)
添加的消息
END_MESSAGE_MAP()
之间。这个宏展开其实就是第1点说到的数组。
4、MFC 是一个很复杂的框架,建议看其源代码并配合相应书籍来学习其原理,对以后阁下框架的设计会很有帮助。
推荐书籍:候俊杰 《深入浅出 MFC》、 王艳平 《Windows 程序设计》。(任选一本即可)

什么是消息映射?
消息映射简单来说就是一张表,上面有两列,一列是“消息”名称,另一列是“处理函数”名字。它的作用是,当甲事件发生,消息甲到达,查映射表,找出消息甲对应的处理函数,调用此处理函数处理。其它事件发生,有相应消息到达,查映射表,找出处理函数,处理。MFC消息映射机制的具体实现方法是:在每个能...

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

什么是消息映射?它的作用是什么?
消息映射简单来说 就是一张表, 上面有两列,一列是 “消息”名称,另一列是 “处理函数”名字。它的作用是,当 甲事件发生,消息甲 到达,查映射表,找出 消息甲 对应的 处理函数,调用 此 处理函数处理。其它 事件发生,有相应消息到达,查映射表,找出处理函数,处理。例如下面就是一张CXxxVie...

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

什么是消息映射?它的作用是什么?
消息可以由系统或者应用程序产生。系统在发生输入事件时产生消息。举个例子, 当用户敲键, 移动鼠标或者单击控件。系统也产生消息以响应由应用程序带来的变化, 比如应用程序改变系统字体改变窗体大小。应用程序可以产生消息使窗体执行任务,或者与其他应用程序中的窗口通讯。MFC使用一种消息映射机制来处理消息,...

消息映射和消息回调有什么区别
消息映射是把消息与回调函数关联起来 例如ON_COMMAND(id_DataAccess, OnDataAccess)它会告诉系统消息的产生者是id_DataAccess,消息的类型是COMMAND,消息的回调函数是OnDataAccess 消息回调就是调用回调函数,MFC响应消息的机制都是以回调函数的形式进行的,这就要求你在定制消息时有几步必需做的步骤 1....

消息映射机制什么是消息映射机制
MFC(Microsoft Foundation Classes)采用了一种高效的消息映射机制,这一机制的核心在于构建一个消息与处理函数之间的映射表。这个表在应用程序框架中扮演着至关重要的角色,它包含了预定义的消息类型和对应的处理函数声明与实现代码。每当窗口接收到一个消息,它会自动在消息映射表中查找匹配的消息,然后调用...

简述生成一个MFC应用程序的步骤?消息映射如何实现?其和消息处理函数间的...
第二步,它定义了消息映射表。(到你想看得东西了吧),什么是消息映射表?简单说,就是一个数组,这个数组的类型是第一步所定义的结构,所以这个数组里面每一个元素,都包含了两个变量,消息,消息对应的函数。搞完这两部,下面要对winproc函数进行改造了。原来用switch case,现在不用了,我们用一...

MFC中消息映射函数和普通成员函数有什么区别
我认为最大的一个区别就是消息映射函数不是由你调用,而是当消息被触发时由MFC框架进行调用的,普通的成员函数则肯定是由你自己来调用啦。譬如你为鼠标左键映射了一个消息函数,那么当鼠标左键消息触发时,你肯定不用理会响应函数啦,系统会帮你调用该函数。有道理的话,请采纳。

响应机制是什么意思?
消息映射就是实现消息跟响应函数联系起来 问题三:反应机理计算中的反应入口是什么意思 双键相连两碳原氢氧化羧基: 12KMnO4 + 5C2H4 + 18H2SO4 = 6K2SO4 + 12MnSO4 + 10CO2 + 28H2O 碱性且低温: 2KMnO4 + 5C2H4 + 3H2SO4 + 2H2O = K2SO4 + 2MnSO4 + 5HOCH2CH2OH 与其烯烃反类...

相似回答
大家正在搜