以消息为基础,以事件驱动之

程序的进行依靠外部消息来驱动,即:程序不断等待任何可能的输入,然后做判断,然后再做适当的处理。

消息输入:操作系统捕获,以消息形式进入程序。(操作系统通过其USERS模块中掌管各个外围的驱动程序来侦测。他们有侦测循环)

输入:硬件输入放在系统队列 里+软件输入放在程序队列里。

应用程序调用GetMessage API取得消息。

个人理解windows消息机制:

窗口注册的时候做了一下动作:

注册窗口类(指定窗口函数)+创建窗口。这样操作系统就知道一个窗口对象的窗口函数是谁了。当应用程序得到一个消息之后发现句柄是自己的窗口对象之一,那么就告诉操作系统,这个是这个家伙的消息,相当于把对象指针给操作系统,操作系统就给应用程序说:哦,他的窗口函数是winproc,你去调用吧。应用程序说:好的,我这就去。这样应用程序就去调用这个对象的系统函数了。

1.系统的侦测循环侦测到一个动作,会自动判断其所操作的对象,这里的判断可以通过动作(一般是鼠标或键盘),比如如果是侦测到鼠标操作左键点击,那么会检测到鼠标当前的位置,然后再检测当前界面上的dlg对象的位置,判断出具体点击的是哪一个。

2.找到了之后,就将被点击的对象的句柄等信息生成一个结构体对象,这样就产生了一个消息。将消息放入到消息队列中。

3.应用程序就像有一个电动机一个,不停的检测消息队列,将每一个消息都拿过来和自己的各个对象作比较,看是否属于自己的这些对象的消息,如果消息句柄相等了,就属于。如果有属于的消息,就交给对应的对象去处理(调用对象的窗口函数,但是这时候应用程序并不知道窗口函数是什么?所以还好借助系统来处理,因为在注册窗口的时候将窗口函数告知了操作系统的)。

综上可得:消息的处理者是窗口对象,所以每个窗口应该有一个窗口函数来处理消息,在这个窗口函数中,处理自己感兴趣的消息,这里就是程序员自己劳动的天地。

我对windows消息机制的理解(参考深入浅出MFC,欢迎批评指正!!)的更多相关文章

  1. windows消息机制(转)

    1. 引言Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛.Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多Dos 程序员不 ...

  2. 深入理解windows 消息机制

    深入理解Windows消息机制 今天我们来学一学Windows消息机制,我们知道在传统的C语音程序中,当我们需要打开一个文件时,我们可以调用fopen()函数,这个函数最后又会调用操作系统提供的函数以 ...

  3. 转:Windows消息机制要点

    Windows消息机制要点 1. 窗口过程     每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ...

  4. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  5. <Win32_1>深入浅出windows消息机制[转自crocodile_]

    上学期学习了Java ,感觉Java写一个窗口真心简单,很易上手,也就难怪很多开发人员选择Java作为自己的开发编程语言.但是由于自身对windows的热爱,让我觉得c.c++语言才是我亲睐的编程语言 ...

  6. 收藏:Windows消息机制

    百度百科介绍的windows消息机制也不错:http://baike.baidu.com/view/672379.htm Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视 ...

  7. windows消息机制框架原理【简单版本】

    windows消息机制框架原理 结合两张图理解 窗口和窗口类 Windows UI 应用程序 (e) 具有一个主线程 (g).一个或多个窗口 (a) 和一个或多个子线程 (k) [工作线程或 UI 线 ...

  8. 深入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 ...

  9. Windows消息机制要点

    1. 窗口过程     每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wP ...

随机推荐

  1. uC/OS-II核心(Os_core)块

    /*************************************************************************************************** ...

  2. Java @Override报错

    问题 如果在使用Eclipse开发Java项目时,在使用 @Override 出现以下错误:The method *** of type *** must override a superclass ...

  3. 监控web页面的性能指标。

    监控一个web页面的性能也是非常重要的,h5提供了一个非常好的属性来监控:  window.performance 它有两个成员:    navigation (一个叫做performanceNavi ...

  4. Game Programming Pattern

    http://gameprogrammingpatterns.com/contents.html

  5. python 常见排序实例

    使用Python 基础排序算法设计,冒泡排序,插入排序,快速排序... 需求 对一组无序数据进行排序算法设计,要求如下: 输入:[1, 3, 5, 23, 75, 34, 456, 86, 22, 7 ...

  6. JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB

    JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...

  7. [LeetCode] Longest Valid Parentheses

    第一种方法,用栈实现,最容易想到,也比较容易实现,每次碰到‘)’时update max_len,由于要保存之前的‘(’的index,所以space complexity 是O(n) // 使用栈,时间 ...

  8. 在CentOS上搭建apache和PHP服务器环境(转)

    1.您也可以使用一键自动部署环境的工具,请参见网友开发的这个工具 http://www.centos.bz/2013/08/ezhttp-tutorial/ 2. 安装: wget -c http:/ ...

  9. hive odbc

    C:\Windows\SysWOW64  

  10. 清除SQL server2008 记住的用户名和密码

    删除以下文件即可: C:\Users\%username%\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStud ...