微软MFC技术中消息的定义

这篇具有很好参考价值的文章主要介绍了微软MFC技术中消息的定义。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微软MFC技术中消息的定义,Visual Studio技术,mfc,c++,microsoft,windows,开发语言

 我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊MFC技术中消息的定义。

本贴子首先介绍MFC消息的基本概念,理解消息的定义是学习使用MFC的基础。了解消息的驱动机制后,才能彻底明白MFC的运行机制。

首先来看什么是消息。通俗地讲,人们常常把外界的各种报道称为消息。消息反映知识状态的改变。而对于计算机语言来说,消息是对象之间进行交互作用和通信的。单一的对象通常没有多大用处。相反,一个对象通常需要跟许多其他对象相互交互才能完成一系列的事件并实现自身价值。

当一辆汽车不被使用时,它就是一堆金属和橡胶,它没有任何的活动。而只有当其他的对象与其交互时,它才可以有所动作。一个MFC程序如果要实现某种功能,就必须要有其他对象与其进行交互或通信。当一个对象希望一个MFC程序执行此对象的方法,此对象就会发送消息给这个MFC程序。在MFC程序设计中,消息是指一个类实例和另一个类实例之间传递的信息。

有时,接收的对象需要更多的信息,这样它才可以正确知道该如何做。比如,当司机想改变汽车的转向,司机就必须为汽车指向应转向哪个方向。此信息是将消息作为参数来传递的。它是由司机传给汽车。

另外,消息提供了两个重要的好处:对象的行为是通过它的方法来表达的,因此消息传递支持所有对象之间的可能的交互,对象不需要在相同的进程或者相同机器上来发送和接收消息给其他的对象。

微软MFC技术中消息的定义,Visual Studio技术,mfc,c++,microsoft,windows,开发语言

消息的定义

消息系统对于MFC程序来说十分重要,它相当于一辆汽车的发动机。一个消息,是系统定义的一个32位的值,它唯一地定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了。例如,双击鼠标、改变窗口位置、按下键盘上的一个键都会使Windows发送一个消息给应用程序。

消息本身是作为一系列值传递给应用程序的,其中包括消息的类型以及其他信息。例如,对于按下键盘上的一个键所产生的消息来说,这一系列值中包括了按下键的值。此一系列值的类型叫做MSG,MSG含有 Windows应用程序消息队列的消息信息,它在 Windows中声明如下:

typedef struct tagMsg
{
  HWND hwnd;    //接受该消息的窗口句柄
  UINT message;  //消息常量标识符,也就是通常所说的消息号
  WPARAM wParam;  //32位消息的特定附加信息,确切含义依赖于消息值
  LPARAM lParam;  //32位消息的特定附加信息,确切含义依赖于消息值
  DWORD time;    //消息创建时的时间
  POINT pt;     //消息创建时的光标在屏幕坐标系中的位置
}MSG;

消息可以由系统或者应用程序产生。系统在发生输入事件时产生消息。例如,当用户单击鼠标、敲击键盘或者单击控件,系统也产生消息以响应由应用程序带来的变化。又比如应用程序可以产生消息使窗体执行任务、改变窗口风格、更换贴图等。

微软MFC技术中消息的定义,Visual Studio技术,mfc,c++,microsoft,windows,开发语言


针对上面给出的消息MSG,接下来再进一步地解释此结构体中的各个变量。

(1)hwnd表示消息所属的窗口。MFC程序都是窗口应用程序,一个消息一般都是与某个窗口相关联的。例如, 在某个活动窗口中单击鼠标右键, 产生的按键消息就是发给该窗口的。在MFC程序中,用 HWND类型的变量来标识窗口。

(2)message指定了消息的标识符。在Windows中, 消息是由一个数值来表示的,不同的消息对应不同的数值。 但是由于数值不便于记忆,所以 Windows将消息对应的数值定义为WM_XXX宏(WM是Window Message的缩写)的形式,XXX对应某种消息的英文拼写的大写形式。例如,单击鼠标右键消息是 WM_RBUTTON_DOWN,键盘按下消息是WM_KEYDOWN,字符消息是WM CHAR等。在程序中,通常是以WM_XXX宏的形式来使用消息的。

(3)wParam和IParam用于指定消息的附加信息。例如, 当收到一个字符消息时,message成员变量的值就是WM_CHAR, 但用户到底输入的是什么字符,那么就由wParam和lParam来说明。wParam、 lParam表示的信息随 message的值不同而不同。另外在MSDN 中可以发现这两种类型实际上就是unsigned int和 long。

(4) time表示消息投递到消息队列中的时间。

(5)pt表示消息投递到消息队列中光标的当前位置。

注意:如果想知道WM_XXX消息对应的具体数值, 可以在MFC工程中右击WM_XXX,在弹出的菜单中选择Go To Definition, 即可看到该宏的具体定义。跟踪或查看某个变量的定义,都可以使用这个方法。或者是直接在MSDN 中查找。
 

微软MFC技术中消息的定义,Visual Studio技术,mfc,c++,microsoft,windows,开发语言

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。文章来源地址https://www.toymoban.com/news/detail-525080.html

到了这里,关于微软MFC技术中消息的定义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Visual Studio在Debug模式下,MFC工程中包含Eigen库时的定义冲突的问题

    EigensrcCorePlainObjectBase.h(143,5): error C2061: 语法错误: 标识符“THIS_FILE” EigensrcCorePlainObjectBase.h(143,1): error C2333: “Eigen::PlainObjectBase::operator new”: 函数声明中有错误;跳过函数体 EigensrcCoreCwiseNullaryOp.h(341,27): error C2039: “setConstant”: 不是 “Eigen::PlainObjectBase” 的成员 以上仅

    2024年02月14日
    浏览(26)
  • 微软MFC技术简明介绍

    我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下微软MFC技术简明介绍 微软公司于1992年上半年推出了C/C++ 7.0 产品时初次向世人介绍了MFC 1.0,这个产品包含了20,000行C++原始代码,60个以上的Windows相关类,以及其它的一般类如时间、数据处理、文件、内存、诊断、

    2024年02月11日
    浏览(30)
  • 微软MFC技术运行机制

    我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下微软MFC技术运行机制。 很多初学者误以为VC++开发必须使用MFC,其实不一定的。MFC的使用只能是提高程序在某些情况下的开发效率,而不能替代整个Win32程序设计。我认为我们有必要再来好好讲讲MFC的本质、MFC中的

    2024年02月08日
    浏览(32)
  • Visual Studio 2022的MFC框架——theApp全局对象

      我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。  MFC中的WinMain函数是如何与MFC程序中的各个类组织在一起的呢?MFC程序中的类是如何与WinMain函数关联起来的呢? 面对这个问题,我们来分析一下。 双击我在

    2024年02月11日
    浏览(19)
  • Visual Studio 2022的MFC框架——AfxWinMain全局对象和InitInstance函数

    我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。  在看这篇帖子前,请先看我的另一篇帖子《Visual Studio 2022的MFC框架——应用程序向导》。 当程序调用了CWinApp类的构造函数,并执行了CMfcApp类的构造函数,且产

    2024年02月10日
    浏览(22)
  • 找不到mfc140u.dll或者Microsoft Visual C++ 2017 Redistributable一直安装失败解决

    安装后提示这个问题,我将xshell卸载重新安装后发现安装过程中提示Microsoft Visual C++ 2017 Redistributable一直安装失败,所以问题出在Microsoft Visual C++ 2017 Redistributable上 首先查看日志文件 说明有更高的版本 控制面板–》卸载程序 发现比自己版本高的,卸载掉 下载Microsoft Visual C

    2024年02月12日
    浏览(36)
  • visual Studio MFC 平台实现拉普拉斯和拉普拉斯与直方图均衡化与中值滤波相结合实现比较

    本文使用visual Studio MFC 平台实现图像增强中的拉普拉斯变换,同时拉普拉斯一般不会单独使用,与其他平滑操作相结合,本文使用了拉普拉斯与直方图均衡化以及与中值滤波相结合,也对三种方式进行了对比 关于基础工程的创建可以参考 01-Visual Studio 使用MFC 单文档工程绘制

    2024年02月04日
    浏览(34)
  • Visual Studio中C++部分的官方文档链接【微软(Microsoft)所有产品的官方文档链接】

    目前(2022年07月),微软官方网站上关于Visual Studio的文档,最老的版本也是VS2015了,如下图所示: 微软所有产品的文档目录: 中文版:https://docs.microsoft.com/zh-CN/documentation/ 英文版:https://docs.microsoft.com/en-us/documentation/ Visual Studio中C++部分的官方文档: 中文版:https://docs.microso

    2024年02月07日
    浏览(54)
  • Microsoft Visual studio 2022 如何自定义背景(详细) Visual studio 2022 怎么改背景和幻灯片播放(自定义背景)

    1.新建一个项目,项目名称无所谓 进入编辑页面后,点击拓展管理拓展联机 右边搜索框搜索 ClaudiaIDE, 键入后点击回车搜索,然后点击下载,等待下载完成,(这里下载进度条一直不动的话可能是网络不好的原因,我这里已经安装好了) 下载完成后,关闭visual studio 2022,桌

    2024年02月06日
    浏览(68)
  • 【MFC】07.MFC六大机制:消息映射-笔记

    本专栏上两篇文章分别介绍了【MFC】05.MFC第一大机制:程序启动机制和【MFC】06.MFC第二大机制:窗口创建机制,这篇文章来为大家介绍MFC的第三大机制:消息映射 typfd要实现消息映射,必须满足的三个条件: 类必须继承于CmdTargert 类必须声明重定义 DECLARE_MESSAGE_MAP 类外必须实

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包