我对windows消息机制的理解(参考深入浅出MFC,欢迎批评指正!!)
以消息为基础,以事件驱动之
程序的进行依靠外部消息来驱动,即:程序不断等待任何可能的输入,然后做判断,然后再做适当的处理。
消息输入:操作系统捕获,以消息形式进入程序。(操作系统通过其USERS模块中掌管各个外围的驱动程序来侦测。他们有侦测循环)
输入:硬件输入放在系统队列 里+软件输入放在程序队列里。
应用程序调用GetMessage API取得消息。
个人理解windows消息机制:
窗口注册的时候做了一下动作:
注册窗口类(指定窗口函数)+创建窗口。这样操作系统就知道一个窗口对象的窗口函数是谁了。当应用程序得到一个消息之后发现句柄是自己的窗口对象之一,那么就告诉操作系统,这个是这个家伙的消息,相当于把对象指针给操作系统,操作系统就给应用程序说:哦,他的窗口函数是winproc,你去调用吧。应用程序说:好的,我这就去。这样应用程序就去调用这个对象的系统函数了。
1.系统的侦测循环侦测到一个动作,会自动判断其所操作的对象,这里的判断可以通过动作(一般是鼠标或键盘),比如如果是侦测到鼠标操作左键点击,那么会检测到鼠标当前的位置,然后再检测当前界面上的dlg对象的位置,判断出具体点击的是哪一个。
2.找到了之后,就将被点击的对象的句柄等信息生成一个结构体对象,这样就产生了一个消息。将消息放入到消息队列中。
3.应用程序就像有一个电动机一个,不停的检测消息队列,将每一个消息都拿过来和自己的各个对象作比较,看是否属于自己的这些对象的消息,如果消息句柄相等了,就属于。如果有属于的消息,就交给对应的对象去处理(调用对象的窗口函数,但是这时候应用程序并不知道窗口函数是什么?所以还好借助系统来处理,因为在注册窗口的时候将窗口函数告知了操作系统的)。
综上可得:消息的处理者是窗口对象,所以每个窗口应该有一个窗口函数来处理消息,在这个窗口函数中,处理自己感兴趣的消息,这里就是程序员自己劳动的天地。
我对windows消息机制的理解(参考深入浅出MFC,欢迎批评指正!!)的更多相关文章
- windows消息机制(转)
1. 引言Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛.Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多Dos 程序员不 ...
- 深入理解windows 消息机制
深入理解Windows消息机制 今天我们来学一学Windows消息机制,我们知道在传统的C语音程序中,当我们需要打开一个文件时,我们可以调用fopen()函数,这个函数最后又会调用操作系统提供的函数以 ...
- 转:Windows消息机制要点
Windows消息机制要点 1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ...
- Windows消息机制
Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...
- <Win32_1>深入浅出windows消息机制[转自crocodile_]
上学期学习了Java ,感觉Java写一个窗口真心简单,很易上手,也就难怪很多开发人员选择Java作为自己的开发编程语言.但是由于自身对windows的热爱,让我觉得c.c++语言才是我亲睐的编程语言 ...
- 收藏:Windows消息机制
百度百科介绍的windows消息机制也不错:http://baike.baidu.com/view/672379.htm Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视 ...
- windows消息机制框架原理【简单版本】
windows消息机制框架原理 结合两张图理解 窗口和窗口类 Windows UI 应用程序 (e) 具有一个主线程 (g).一个或多个窗口 (a) 和一个或多个子线程 (k) [工作线程或 UI 线 ...
- 深入Delphi -- Windows 消息机制
http://www.txsz.net/xs/delphi/3/Windows%20%E6%B6%88%E6%81%AF%E6%9C%BA%E5%88%B6.htm Windows 消息机制 by m ...
- Windows消息机制要点
1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wP ...
随机推荐
- 纯css3实现旋转的太极图
效果图: 代码如下: <!DOCTYPE html> <html> <head lang="zh"> <meta charset=&quo ...
- [转载]将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,解决办法
eclipse 代码中文注释乱码 求解决 将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,主要原因就是别人的IDE编码格式和自己的Eclips ...
- centos 查看cpu个数、核数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...
- ubuntu14.04安装了im-switch后系统设置中不见了语言支持
sudo apt-get install language-selector-gnome
- JavaWeb学习笔记——JavaEE基础知识
- Java查找算法——二分查找
import java.lang.reflect.Array; import java.nio.Buffer; import java.util.Arrays; import java.util.Ra ...
- Construct Bounding Sphere
点集的包围球 http://en.wikipedia.org/wiki/Bounding_sphere http://blogs.agi.com/insight3d/index.php/2008/02 ...
- PHP页面跳转
PHP页面跳转一.header()函数 header()函数是PHP中进行页面跳转的一种十分简单的方法.header()函数的主要功能是将HTTP协议标头(header)输出到浏览器. header( ...
- Docker Compose to CoreOS
taken from https://docs.docker.com/compose/install/ the only thing is that /usr is read only, but /o ...
- 如何判断PHP 是线程安全还是非线程安全的
什么是线程安全与非线程安全? 线程安全就是在多线程环境下也不会出现数据不一致,而非线程安全就有可能出现数据不一致的情况. 线程安全由于要确保数据的一致性,所以对资源的读写进行了控制,换句话说增加了系统 ...