我对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 ...
随机推荐
- easyUI创建dialog弹框
1.在当前页面必须有一个DIV <!-- 保证金明细的详情列表显示 --> <div id="dialog-alarm-detail"></div&g ...
- 磁盘里的B,MB,GB,TB储存单位是怎么换算大小的?
磁盘里的B,MB,GB,TB是怎么换算大小的? 1TB=1024GB1GB=1024MB1MB=1024KB1KB=1024Byte 注:Byte就是B也就是字节KB是千字节MB是兆GB是吉字节 即千 ...
- CV界的明星人物们
CV界的明星人物们 来自:http://blog.csdn.net/necrazy/article/details/9380151,另外根据自己关注的地方,加了点东西. 今天在cvchina论坛上看到 ...
- CodeForces 459A Pashmak and Garden(水~几何-给两点求两点组成正方形)
题目链接:http://codeforces.com/problemset/problem/459/A 题目大意: 给出两个点(在坐标轴中),求另外两个点从而构成一个正方形,该正方形与坐标轴平行. 如 ...
- js获取某个ID的class名称
.HTML结构 <div id = "test" class="test_class">我的类名为test_class</div> &l ...
- Quartz.NET总结(二)CronTrigger和Cron表达式
Quartz.NET的任务调度,主要就是依靠CronTrigger和Cron表达式.Cron是已经在UNIX存在了很长一段时间,它有着强大和可靠的调度能力.CronTrigger类也正是是基于Cron ...
- docker和shipyard使用问题
http://blog.csdn.net/cuisongliu/article/details/49178461 Docker启动如果随服务一起启动? docker run -ti -d --rest ...
- EF DbModelBuilder
protected override void OnModelCreating(DbModelBuilder modelBuilder) { var model = modelBuilder.Buil ...
- 性能工具MiniProfiler在Asp.Net WebForm跟踪EntityFramework
http://www.xuebuyuan.com/356638.html 选择MiniProfiler.EF 默认会把MiniProfiler安装上,笔者程序是Asp.Net WebForm 不需要安 ...
- C#和SQL实现的字符串相似度计算代码分享
http://www.jb51.net/article/55941.htm C#实现: 复制代码 代码如下: #region 计算字符串相似度 /// <summary> ...