第三章 窗口和消息_进击的横打的博客-程序员宅基地

技术标签: null  application  winapi  Windows程序设计  callback  windows  menu  

 3.1自己的窗口

建立窗口很需呼叫CreateWindow函数.窗口以「消息」的形式接收窗口的输入,窗口也用消息与其它窗口通讯。

程序建立的每一个窗口都有相关的窗口消息处理程序。「Windows给程序发送消息。是指Windows呼叫程序中的一个函数,该函数的参数描述了这个特定消息。这种位于Windows程序中的函数称为「窗口消息处理程序」。Windows通过呼叫窗口消息处理程序来给窗口发送消息。

Windows程序开始执行后,Windows为该程序建立一个「消息队列」。这个消息队列用来存放该程序可能建立的各种不同窗口的消息。程序中有一小段程序代码,叫做「消息循环」,用来从队列中取出消息,并且将它们发送给相应的窗口消息处理程序。

3.2Windows 程序设计的难点
程序的所有实际动作均在窗口消息处理程序中发生。Windows程序所作的一切,都是响应发送给窗口消息处理程序的消息。
窗口中发生的一切都以消息的形式传给窗口消息处理程序。DefWindowProc处理完消息后会产生其它的消息。

队列化消息与非队列化消息:
队列化的消息被「发送」给消息队列,而非队列化的消息则「发送」给窗口消息处理程序。

windows应用程序和windows系统都有自己的消息队列,所有针对特定应用程序的消息其中既有被系统处理过的(队列化消息),

  也有未经过系统消息队列的(非队列化消息)。  
  队列化消息一般都会经过系统的包装处理,非队列化消息没有这样的经历。  

 

消息与硬件的中断不同。在一个窗口消息处理程序中处理消息时,程序不会被其它消息突然中断。消息循环和窗口消息处理程序不是并发执行的。当一个消息循环从其消息队列中接收一个消息,
 然后呼叫DispatchMessage将消息发送给窗口消息处理程序时,直到窗口消息处理程序将控制传回给Windows,
 DispatchMessage才能结束执行。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Last_Impression/article/details/4814569

智能推荐

svg.js创建svg_海纳GIS的博客-程序员宅基地

<!DOCTYPE html><html> <head> <title>SVG.js</title> <script src="https://cdn.jsdelivr.net/npm/@svgdotjs/[email protected]/dist/svg.min.js"></script> <script type="text/javascript"> .

学习Oracle7的OCI(Oracle Call Interface)时,翻译了一部分Oracle7的OCI官方文档_diligentwin的博客-程序员宅基地

学习Oracle7的OCI(Oracle Call Interface)时,翻译了一部分Oracle7的OCI官方文档          这是第一开通博客,也是自己第一上传自己写的一些学习资料。刚开始学习Oracle数据库的时候,老师讲了Pro*C连接Oracle数据的方式,

动态加载html 添加样式表,使页面动态加载不同CSS样式表,从而实现不同风格模板的方法..._阿阿阿阿枕的博客-程序员宅基地

我们在制作网页时,有时会制作多种风格模板,而想把这些模板都用起来,而又不知道方法,通过以下两种方法,你就可以实现相同网站不同CSS模板的方法。ASP.Net中利用CSS实现多界面两种方法。方法一:<%@page language="C#"%><%@import namespace="System.Data"%><script language="c#" runat="server">public ...

数据库常用SQL_admin666666的博客-程序员宅基地

查看表被哪些视图或存储过程引用SELECT OBJECT_NAME(id) FROM syscomments WHERE id IN(SELECT object_id FROM sys.objects WHERE type='P')AND text LIKE '%TABLE%' --根据分隔符一条变多条select * INTO #temp from (SELECT '1-2-...

UI5-文档-4.26-(Optional) Remote OData Service_abbilglf665483的博客-程序员宅基地

到目前为止,我们已经使用了本地JSON数据,但是现在我们将访问一个真正的OData服务来可视化远程数据。用可公开获得的Northwind OData服务显示并替换发票模型的JSONModel类型,以可视化远程数据。您将会惊讶地发现,要实现这一点,几乎不需要做什么更改!请注意:这一步是可选的。如果无法使其工作,不要太担心,其余步骤也将处理到目前为止使用的本地JSON数据...

jmeter中添加断言_weixin_33728268的博客-程序员宅基地

断言是干什么的?判断业务是否请求成功的利器。选择http请求,右键,断言-响应断言验证获取信息中的请求结果用户名是xiaohei。没有报错,则表示成功。注意,断言不要中文,避免不必要的麻烦!!!转载于:https://www.cnblogs.com/wyhv5/p/9097417.html...

随便推点

Java编程思想__多态_NULL_ZGX的博客-程序员宅基地

在面向对象的程序设计语言中, 多态是继数据抽象和继承之后第三个基本特征。 多态通过分离 做什么 和 怎么做, 从另一角度将接口和实现分离开来。多态不但能改善代码的组织结构和可读性,还能够创建可扩展的程序__即无论在项目最初创建时还是在需要添加新功能时都可以 生长 程序。 封装 通过合并特征和行为来创建新的数据类型。实现隐藏 则通过将细节 私有化 把接口和实现分离开来。在论向上转型对...

Daily scrum 12.11_weixin_33943836的博客-程序员宅基地

由于前几日大家都在赶大作业,所以beta阶段的工作并没有正式开始。今天开始我们将会赶上进度,争取在beta阶段结束的时候完成我们的目标。姓名今日任务徐钧鸿数据库修复黄可嵩搜索部分bug修复张艺用户管理部分bug修复徐方宇上传下载补充刘浩然数据库修复钟毅恒UI美化杨伊...

64位mysql安装图解,windows 64位下MySQL 8.0.15安装教程图文详解_weixin_39922476的博客-程序员宅基地

先去官网下载点击的MySQL的下载下载完成后解压解压完是这个样子配置系统环境变量复制解压后的mysql到C盘或者其他磁盘下我们去系统的环境变量的path里添加一个mysql的配置 指向mysql的bin目录配置初始化的my.ini文件的文件解压后的目录并没有的my.ini文件,没关系可以自行创建在安装根目录下添加的my.ini(新建文本文件,将文件类型改为的.ini),写入基本配置:?安装的My...

Java中如何交换两个对象_gaozhuang63的博客-程序员宅基地_java对象交换

Java如何交换两个对象转载:https://www.geeksforgeeks.org/swap-exchange-objects-java/假设我们有一个叫Car的类,这个类中也有一些属性。我们创建Car类的两个对象,一个叫car1,另一个叫car2,那如何交换car1与car2的数据呢?交换成员:例如,如果这个Car类只有一个整型的车号,我们可以通过交换两个车的号码来交换两个车。// A Java program to demonstrate that we can swap two// o

Tensorflow c++ Ubuntu上的从源码编译【一】_快乐的小撒比的博客-程序员宅基地

【数据结构】浙大欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markd

svn服务器搭建及使用_wenke83548的博客-程序员宅基地

svn服务器的搭建svn客户端的命令使用