花点时间了解消息,句柄和窗口
消息、句柄和窗口
一,为什么我要花时间研究这些东西
对于我个人来说我不想做码农,不想只知道拖控件,使用控件有的时候要了解一下底层,不知道你们有没有想过这样的一个问题,我们在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
花点时间了解消息,句柄和窗口相关推荐
- 鲜花电商狼烟四起,花点时间的“悦己”生意还能香多久?
鲜花垂直电商花点时间的"线上卖花"生意,在一度陷入低谷之后,如今似乎迎来了第二春. 据金融界报道,在刚刚过去的双11中,花点时间全网销售超过260万束,销售额突破千万元--也是在双 ...
- 理解MiniGUI消息循环和窗口过程
1.2 消息和消息循环 在Windows系列操作系统中,广泛使用了消息驱动的概念.在MiniGUI中,我们也使用了消息驱动作为应用程序的创建构架. 在消息驱动的应用程序中,计算机外设发生的事件,例如 ...
- 2021年大数据Flink(十九):案例一 基于时间的滚动和滑动窗口
目录 案例一 基于时间的滚动和滑动窗口 需求 代码实现 案例一 基于时间的滚动和滑动窗口 需求 nc -lk 9999 有如下数据表示: 信号灯编号和通过该信号灯的车的数量 9,3 9,2 9,7 4 ...
- 好久没有冒泡了,今天花点时间总结下最近做的。
距离上一次写博文可能有半年了吧..平时一些想法,一些学习笔记 更多的是记录在@为知 这个软件上的..个人觉得使用比较方便..所以一直就用它的. 学习总结及规划: 去年开始学习接触JAVA的框架技术, ...
- ActiveMq 不能正确获取有过期时间的消息的原因
2019独角兽企业重金招聘Python工程师标准>>> 场景:mq部署在一台机器上,用本地连接能够正确获取有过期时间的消息,客户端部署到客户机器上,就不能正确获取. 原因:客户机器的 ...
- 关于嵌入式的技术竞争力需要花点时间整理一下给大家
关于嵌入式的技术竞争力需要花点时间整理一下给大家 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取 ...
- 花点时间顺顺Git(上)
花点时间顺顺Git(上) 为了让你们点进来贼努力的想了一个色彩斑斓大吉大利的标题,好,看正文 历史:Linus的作者创建了开源的Linux,02年以前代码管理都依赖手动合并,后来管理不了了,拒绝SVN ...
- 鲜花电商花点时间完成亿元融资 官网域名为英文域名reflower.com.cn
过去鲜花是礼物,现在鲜花是生活.随着消费水平和消费理念的不断升级,国内消费者对于鲜花产品的需求逐年上升,市场上涌现出大量的鲜花类电商. 2月24日消息,据天眼查App显示,鲜花生活方式品牌" ...
- 学习一项技能要花多少时间?
转载自: Rei(Ruby-China 创始人) http://chloerei.com/2013/12/12/how-long-does-it-take-to-learn-a-skill/ 前不 ...
最新文章
- Oracle简单脚本演示样例
- hadoop元数据mysql中表字段_Hive 元数据表结构详解
- python手机版打了代码运行不了-如何用iPad运行Python代码?
- 深度学习解决多视图非线性数据特征融合问题
- Envy-便当的显卡驱动布置剧本
- Sql Server2005性能
- 转: 关于流量控制与令牌桶介绍
- python文件合法模式组合_python设计模式之组合模式
- MySQL索引对NULL值的处理
- TensorFlow3-会话
- Java实现MySQL数据库备份(一)
- [存]超酷JS拖拽翻页效果
- vue 状态管理vuex(九)
- 手机计算机图标大全,我的电脑里我的手机图标怎么删除
- 如何在微信环境中点击链接关注微信公众号
- 使用清华镜像站下包、pip通过清华镜像站下载
- 拉伯证券|A股大涨!外资30分钟爆买百亿!汽车股狂飙
- 万字长文读懂微信“看一看”内容理解与推荐
- oracle 将多列数据合并成一列显示
- python update函数会调用哪些内置函数_Python字典的内置函数中没有 append()操作,可以用 update()来更新字典内容...