Windows消息机制初谈 (转)[@more@]是一个消息的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。 1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。当进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HI(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。 2、谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。 3、未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些你不处理消息。正因为有了这个默认窗口过程我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。 4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。 5、示例:下面有一段伪代码演示如何在窗口过程中处理消息 LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM) { switch(uMessageType) {//使用SWITCH语句将各种消息分开 case(WM_PAINT): doYourWindow(...);//在窗口需要重新绘制时进行输出 break; case(WM_LBUTTONDOWN): doYourWork(...);//在鼠标左键被按下时进行处理 break; default: callDefaultWndProc(...);//对于其它情况就让系统自己处理 break; } } 接下来谈谈什么是消息机制:系统将会维护一个或多个消息队列,所有产生的消息都回被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以Windows可以同时进行多个任务。下面的伪代码演示了消息循环的用法: while(1) { id=getMessage(...); if(id == quit) break; translateMessage(...); } 当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的时间。 图示消息投递 在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时系统就会得不到控制权。这种多任务系统也就称为协同式的多任务系统。Windows3.X就是这种系统。 而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT就是这种系统。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-993123/,如需转载,请注明出处,否则将追究法律责任。

windows消息机制和Linux,Windows消息机制初谈 (转)相关推荐

  1. linux下修改windows密码忘记,不记得linux/windows中mysqlroot密码万能修改方法

    本文章来介绍一下在linux和windows不记得root密码的修改方法,有碰到此类问题的同学可以参考一下本文章来修改你的密码. 如果本地忘记了root密码 ,可以试试以下方法: 打开CMD首先停止服 ...

  2. windows 装 php curl,linux/Windows安装PHP-curl扩展

    linux系统篇 1.CentOS系统 php安装包目录:/data/php5.6.14/ PHP安装路径:/usr/local/php/ (下面步骤中的具体路径设置,大家根据自己的实际情况设置即可. ...

  3. linux runtime pm机制的深入理解

    一:runtime机制说明 何为runtime机制?也就是系统在非睡眠状态,设备在空闲时可以进入runtime suspend状态同时不依赖系统wake_lock机制,非空闲时执行runtime re ...

  4. 【C/C++ Windows编程】Windows系统消息、Qt消息事件、linux下kill信号

    Windows系统消息 文章目录 Windows系统消息 前言 一.什么是窗口? 二.什么是消息? 消息分类: windows消息机制架构图: 函数说明 消息结构体 GetMessage Transl ...

  5. Linux的IPC机制(二):Socket/管道/消息队伍/信号量

    每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核. Linux 内核提供了不少进程间通信的机制,我们来一起瞧瞧有哪些? 管道 如 ...

  6. Linux中消息机制的通信原理,android QMI机制---概论

    前言: Qualcomm MSM Interface,作用用于AP和BP侧的交互,通俗说法就是让设备终端TE(可以是手机,PDA,计算机) 对高通BP侧的AMSS系统进行操作,如调用函数,读取数据,设 ...

  7. Handler消息机制(一):Linux的epoll机制

    在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序.在linux新的内核中,有了一种替换它的机制,就是epoll. sele ...

  8. Qt消息机制与window程序消息的对比分析

    理解Qt消息机制刻不容缓,那我们从对比传统的windows消息处理机制对比来说起: 只有知道QT底层的消息处理.对我们理解并学习Qt有很大帮助: 下面我将对windows程序与Qt对比,并在核心代码处 ...

  9. windows下c语言钩子,Windows的钩子机制详解

    一.概述: 了解windows程序设计的人都知道,Windows系统程序的运行是建立在消息传递机制的基础之上的,几乎所有的程序活动都由消息来驱动.钩子机制可以看作是一个消息的中转站,控制系统发出消息的 ...

最新文章

  1. 光敏电阻与光强之间什么关系?
  2. logz.io一个企业级的ELK日志分析器 内部集成了机器学习识别威胁——核心:利用用户对于特定日志事件的反馈处理动作来学习判断日志威胁 + 类似语音识别的专家系统从各方收集日志威胁信息...
  3. ViewHolder VS HolderView ?
  4. 计算机视觉开源库OpenCV之CommandLineParser使用方法
  5. 建模matlab的算法代码呀,数学建模算法打包
  6. dojo中的dojo/on
  7. 百度贴吧的数据抓取和分析(一):指定条目帖子信息抓取
  8. MYSQL GROUP BY 对多个字段进行分组
  9. 局域网打印机怎么连接_mac连接局域网打印机
  10. SAS硬盘与SATA硬盘有什么区别
  11. 计算机知识怎么记忆,计算器记忆加怎么用
  12. 机器学习:线性模型-多重共线性问题的解决-岭回归
  13. 【最实用的chrome插件】CSDN 浏览器插件:CSDN 开发者助手(测评手册1)
  14. coldfusion_在ColdFusion中建立动态菜单
  15. 篡改计算机网络,基于TCP协议的网络数据实时篡改.doc
  16. 【工具】Excel表格数据不能编辑
  17. 基于HTML美中华传统文化题材网页项目的设计与实现 (纯HTML+CSS制作中国茶文化网站)
  18. 遇到网页无法复制文本怎么办,程序员来教你一键解锁,不需要任何软件和插件
  19. PostgreSQL 从备份原理 到 PG_PROBACKUP
  20. 知识点3-设计模式与实践

热门文章

  1. 在OpenCV环境下对图像做Gamma校正
  2. Faster-RCNN学习
  3. 如何解决90%的NLP问题:逐步指导
  4. Linux+Tomcat+Jdk1.8+jenkins环境搭建
  5. 微服务化之缓存的设计
  6. 简单易用的库存管理软件、进销存软件
  7. Html----编写
  8. android 获得屏幕的大小
  9. 让oracle做定时任务【转】
  10. 在查询语句中使用 NOLOCK 和 READPAST