什么是消息映射

什么是消息映射,第1张

问题一:什么是消息映射?它的作用是什么? 消息映射简单来说 就是一张表, 面有两列,一列是 “消息”名称,另一列是 “处理函数”名字。

它的作用是,当 甲事件发生,消息甲 到达,查映射表,找出 消息甲 对应的 处理函数,

调用 此 处理函数处理。

其它 事件发生,有相应消息到达,查映射表,找出处理函数,处理。

例如下面就是一张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 程序设计》。(任选一本即可)

添加消息响应函数,我刚刚试了一下,发现按钮必须放在视图类中消息响应才能成功,放在框架类中不行具体方法是,在视图类的头文件加入CButton m_btn在OnDraw函数中加入m_btn.creat(~~~~),注意这里要用到这个函数的最后一个参数在头文件的protected:

//{{AFX_MSG(CBtnView)

// NOTE - the ClassWizard will add and remove member functions here.

//DO NOT EDIT what you see in these blocks of generated code !

afx_msg void OnButton()//这里添加消息响应函数,函数名随便

//}}AFX_MSG在源文件的这里也就是视图类的CPP文件BEGIN_MESSAGE_MAP(CBtnView, CView)

//{{AFX_MSG_MAP(CBtnView)

// NOTE - the ClassWizard will add and remove mapping macros here.

//DO NOT EDIT what you see in these blocks of generated code!

//}}AFX_MSG_MAP

// Standard printing commands

ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

ON_BN_CLICKED(10003,OnButton)//这里添加函数与按钮单击事件的关联10003是create函数的最后一个参数,OnButton是前面定义个函数名

END_MESSAGE_MAP() 在源文件中任意两个函数之间添加void CBtnView::OnButton()//CBtnView改成你的类名

{

MessageBox("dha")//这里就可以添加单击按钮的响应代码了,这句是我测试加的,你可以换成你想要的

}

添加消息映射:

如果你是dlg编程,

1:先选择控件,然后打到属性页,点击"闪电"图标,就是该控的事件,

在事件名后面是下拉列表,可以添加事件可以编辑事件可

以删除事件,很是方便。

2:属性页面“闪电”图标的下一个按钮就是消息映射了,你可以尝试一下!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7979891.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存