消息、句柄和窗口

一,为什么我要花时间研究这些东西

  对于我个人来说我不想做码农,不想只知道拖控件,使用控件有的时候要了解一下底层,不知道你们有没有想过这样的一个问题,我们在C#中使用的的event事件是怎么触发这个事件呢?事件无非就是对委托的封装,在类内不管用public还是protected进行修饰,再类外都是private,只能在类外+=或者-=对事件进行注册或者注销。这能说明什么呢?这只能说明你已经将事件进行了绑定,说白了就是将方法的地址使用一种参数的形式进行了传递,从一个类传递到另一个类中,然后对这个方法进行实现。如果我们建一个Windows应用程序的时候,我们在重绘窗口是会复写函数Onpaint(),复写之后这个方法又是怎样进行控制的呢?

二、原因何在?

  Windows应用程序是事件驱动的,也就是说,Windows应用程序将等待系统传递输入,然后,应用程序的对输入作出响应,将控件返回到系统上。系统和应用程序通过“Windows消息”通信。无论何时用户移动鼠标或者单击键盘时,系统就将消息发送到应用程序。应用程序有一个特殊的函数(称为“窗口过程”)处理所接受的信息,以使对用户的输入作出响应。这个函数传统上称WndProc(),一般不必这样称呼它。可是,用户交互作用并不只是创建应用程序要处理的消息,另一个示例是电源管理。恰好系统进入休眠模式之前,将消息发送到所有开放应用程序。如果应用程序并不准备进入休眠模式,他可以将消息发送回系统,说“此时不要进入睡眠模式”

  消息路由有两种类型。一种是将消息发送到称为消息队列的“先进先出”队列中。对于所创建的每个用户界面线程来说,有一个系统消息队列和一个特定线程队列。当用户移动鼠标是,相关信息放到系统消息队列中。系统检查该消息,以确定建议那个窗体处理该消息,然后将消息发送到窗口的WndProc()函数进行处理。鼠标和键盘消息就是排队消息的示例。路由消息的其他方式,系统将消息直接发送到窗口过程中。通常情况下会发送不排队消息通知直接影响窗口的事件。诸如重新设置大小以及窗口激活类的消息,将一部排队消息的形式发送。

  每个应用程序可能由几个窗体或者窗口组成。每个窗口都有一个窗口过程,来处理发送给它的消息。窗口过程将检查每条消息,确定对消息进行哪些处理工作。将消息发送到窗口过程的进程,称作“消息泵”。消息泵位于WinMain()函数中,二WinMain()是应用程序的入口点(类似于C#中的Main()方法)。消息有两种类型:系统定义的消息和应用程序定义的消息。系统定义的消息是系统预定义的消息。应用程序定义的消息当然由应用程序定义。为了标示消息,有四个参数与他一起发送

  1.窗口句柄

  2.消息标识符

  3.两个消息参数值,通常称作lParam和wParam

  窗口句柄是一个long型的值,用于操作系统标示特殊的窗口。所创建的每个窗口都有一个句柄与它相关联,这种句柄有时称作hWnd。hWnd是在创建该窗口时由系统产生的,只要该窗口不被销毁,它就保持为常量该消息所发送的句柄,是该消息窗口的句柄。

  消息标识符是一个标识消息内同的指定变量。所处理的常见消息是WM_PAINT消息。这是一个系统定义的消息,告诉该窗口它要重新绘制其自身。系统定义的消息分为30个不同的类别。每个类别都是由该消息的两个或者三个字符前缀定义的。就WM_PAINT消息而言,WM表示普通的窗口消息。其他类别包括用于编辑控件的EM、用于常用对话框的CDM,一集用于选项卡空间的TCM。每个消息标识符都是有一个在Windows SDK 中定义的相应符号标识符。

  lParam和wParam这两个消息参数几乎可以包含任何事物。他们可以包括位标志、整型值、对象引用、结构引用、对于回调函数的引用等。如果消息不使用参数,一般就将其设置为null。

转载于:https://www.cnblogs.com/dwlsxj/archive/2013/03/22/Winform.html

花点时间了解消息,句柄和窗口相关推荐

  1. 鲜花电商狼烟四起,花点时间的“悦己”生意还能香多久?

    鲜花垂直电商花点时间的"线上卖花"生意,在一度陷入低谷之后,如今似乎迎来了第二春. 据金融界报道,在刚刚过去的双11中,花点时间全网销售超过260万束,销售额突破千万元--也是在双 ...

  2. 理解MiniGUI消息循环和窗口过程

    1.2  消息和消息循环 在Windows系列操作系统中,广泛使用了消息驱动的概念.在MiniGUI中,我们也使用了消息驱动作为应用程序的创建构架. 在消息驱动的应用程序中,计算机外设发生的事件,例如 ...

  3. 2021年大数据Flink(十九):案例一 基于时间的滚动和滑动窗口

    目录 案例一 基于时间的滚动和滑动窗口 需求 代码实现 案例一 基于时间的滚动和滑动窗口 需求 nc -lk 9999 有如下数据表示: 信号灯编号和通过该信号灯的车的数量 9,3 9,2 9,7 4 ...

  4. 好久没有冒泡了,今天花点时间总结下最近做的。

    距离上一次写博文可能有半年了吧..平时一些想法,一些学习笔记 更多的是记录在@为知  这个软件上的..个人觉得使用比较方便..所以一直就用它的. 学习总结及规划: 去年开始学习接触JAVA的框架技术, ...

  5. ActiveMq 不能正确获取有过期时间的消息的原因

    2019独角兽企业重金招聘Python工程师标准>>> 场景:mq部署在一台机器上,用本地连接能够正确获取有过期时间的消息,客户端部署到客户机器上,就不能正确获取. 原因:客户机器的 ...

  6. 关于嵌入式的技术竞争力需要花点时间整理一下给大家

    关于嵌入式的技术竞争力需要花点时间整理一下给大家 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取 ...

  7. 花点时间顺顺Git(上)

    花点时间顺顺Git(上) 为了让你们点进来贼努力的想了一个色彩斑斓大吉大利的标题,好,看正文 历史:Linus的作者创建了开源的Linux,02年以前代码管理都依赖手动合并,后来管理不了了,拒绝SVN ...

  8. 鲜花电商花点时间完成亿元融资 官网域名为英文域名reflower.com.cn

    过去鲜花是礼物,现在鲜花是生活.随着消费水平和消费理念的不断升级,国内消费者对于鲜花产品的需求逐年上升,市场上涌现出大量的鲜花类电商. 2月24日消息,据天眼查App显示,鲜花生活方式品牌" ...

  9. 学习一项技能要花多少时间?

    转载自: Rei(Ruby-China 创始人)   http://chloerei.com/2013/12/12/how-long-does-it-take-to-learn-a-skill/ 前不 ...

最新文章

  1. Oracle简单脚本演示样例
  2. hadoop元数据mysql中表字段_Hive 元数据表结构详解
  3. python手机版打了代码运行不了-如何用iPad运行Python代码?
  4. 深度学习解决多视图非线性数据特征融合问题
  5. Envy-便当的显卡驱动布置剧本
  6. Sql Server2005性能
  7. 转: 关于流量控制与令牌桶介绍
  8. python文件合法模式组合_python设计模式之组合模式
  9. MySQL索引对NULL值的处理
  10. TensorFlow3-会话
  11. Java实现MySQL数据库备份(一)
  12. [存]超酷JS拖拽翻页效果
  13. vue 状态管理vuex(九)
  14. 手机计算机图标大全,我的电脑里我的手机图标怎么删除
  15. 如何在微信环境中点击链接关注微信公众号
  16. 使用清华镜像站下包、pip通过清华镜像站下载
  17. 拉伯证券|A股大涨!外资30分钟爆买百亿!汽车股狂飙
  18. 万字长文读懂微信“看一看”内容理解与推荐
  19. oracle 将多列数据合并成一列显示
  20. python update函数会调用哪些内置函数_Python字典的内置函数中没有 append()操作,可以用 update()来更新字典内容...

热门文章

  1. 利用js的闭包原理做对象封装及调用方法
  2. Vue实现组件props双向绑定解决方案
  3. vscode --- 快捷键格式化代码时,分号消失
  4. 笔试小结---线程、进程
  5. 关于系统自带 .NET Framework 版本的说明
  6. 转 Java对日期Date类进行加减运算一二三
  7. 【angularjs】使用angular搭建项目,pc端实现网页中的内容不可复制
  8. 一位良心发现的交易员自述:我们是怎么玩弄散户的
  9. 通过PowerShell获取Windows系统密码Hash
  10. MATLAB 批量改文件名称