我对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 ...
随机推荐
- C#读写文本文件
static public string Read(string path) { StreamReader sr = new StreamReader(path,Encoding.Default); ...
- 10月14日上午PHP环境搭建
第一步:安装wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b文件,安装过程中可能会遇到问题,把遇到的问题代码复制粘贴到360人工服务,查找方案 ...
- MySQL学习笔记——增删改查
有关数据库的DML操作 -insert into -delete.truncate -update -select -条件查询 -查询排序 -聚合函数 -分组查询 DROP.TRUNCATE.DELE ...
- Android学习笔记——Handler(一)
使用Handler管理线程(转) 步骤: 1. 申请一个Handler对象 Handler handler = new Handler(); 2. 创建一个线程 {继承Thread类或者实现Runna ...
- QT 初阶 第二章 创建对话框(查找对话框实例)
最终效果图: 该对话框由三个文件组成:finddialog.h .finddialog.cpp. main.cpp 代码+注释 /*--finddialog.h--*/ #ifndef FINDDIA ...
- php----显示中文乱码的问题
条件: 在显示页面设置页面编码格式为<?php header('Content-Type: text/html; charset=utf-8');?>: 在写入数据库时设置:mysql_q ...
- LaTex 使用 - 配置
Reference Link: http://www.howtotex.com/howto/installing-latex-on-windows/ MikTeX:http://miktex.org/ ...
- top命令详解(转,详细)
来源:脚本之家(http://www.jb51.net/article/40807.htm) 本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任 ...
- 【phpcms-v9】phpcms-v9二次开发所必须知道的步骤(转载)
一.做phpcms-v9二次开发时,我们经常需要用到如下代码,所以有必须在这里注释说明一下 defined('IN_PHPCMS') or exit('No permission resources. ...
- xStream完美转换XML、JSON
xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:htt ...