Windows窗口与消息
进行Windows程序设计,实际上是在进行一种对象导向的程序设计(OOP)。这一点在Windows中使用得最多的对象上表现最为明显。这种对象正是Windows之所以命名为「Windows」的原因,它具有人格化的特征,甚至可能会在您的梦中出现,这就是那个叫做「窗口」的东西。
桌面上最明显的窗口就是应用程序窗口。这些窗口含有显示程序名称的标题列、菜单甚至可能还有工具列和滚动条。另一类窗口是对话框,它可以有标题列也可以没有标题列。
装饰对话框表面的还有各式各样的按键、单选按钮、复选框、清单方块、滚动条和文字输入区域。其中每一个小的视觉对象都是一个窗口。更确切地说,这些都称为「子窗口」或「控件窗口」或「子窗口控件」。
作为对象,使用者会在屏幕上看到这些窗口,并通过键盘和鼠标直接与它们进行交互操作。更有趣的是,程序写作者的观点与使用者的观点极其类似。窗口以「消息」的形式接收窗口的输入,窗口也用消息与其它窗口通讯。对讯息的理解将是学习如何写作Windows程序所必须越过的障碍之一。
一个Windows的消息范例:我们知道,大多数的Windows程序都有大小合适的应用程序窗口。也就是说,您能够通过鼠标拖动窗口的边框来改变窗口的大小。通常,程序将通过改变窗口中的内容来响应这种大小的变化。你可能会猜测,是Windows本身而不是应用程序在处理与使用者重新调整窗口大小相关的全部杂乱程序。由于应用程序能改变其显示的样子,所以它也「知道」窗口大小改变了。
应用程序是如何知道使用者改变了窗口的大小的呢?由于程序写作者习惯了往常的文字模式程序,操作系统没有设置将此类消息通知给使用者的机制。
问题的关键在于理解Windows所使用的架构。当使用者改变窗口的大小时,Window给程序发送一个消息指出新窗口的大小。然后程序就可以调整窗口中的内容,以响应大小的变化。
其实,所谓「Windows给程序发送消息」,是指Windows呼叫程序中的一个函数,该函数的参数描述了这个特定消息。这种位于Windows程序中的函数称为「窗口消息处理程序」。读者对程序呼叫操作系统的做法是很熟悉的。例如,程序在打开磁盘文件时就要使用有关的系统呼叫。读者所不习惯的,可能是操作系统呼叫程序,而这正是Windows对象导向架构的基础。
程序建立的每一个窗口都有相关的窗口消息处理程序。这个窗口消息处理程序是一个函数,既可以在程序中,也可以在动态链接库中。Windows通过呼叫窗口消息处理程序来给窗口发送消息。窗口消息处理程序根据此消息进行处理,然后将控制传回给Windows。更确切地说,窗口通常是在「窗口类别」的基础上建立的。窗口类别标识了处理窗口消息的窗口消息处理程序。使用窗口类别使多个窗口能够属于同一个窗口类别,并使用同一个窗口消息处理程序。例如,所有Windows程序中的所有按钮均依据同一个窗口类别。这个窗口类别与一个处理所有按钮消息的窗口消息处理程序(位于Windows的动态链接库中)联结。
在对象导向的程序设计中,对象是程序与数据的组合。窗口是一种对象,其程序是窗口消息处理程序。数据是窗口消息处理程序保存的信息和Windows为每个窗口以及系统中那个窗口类别保存的信息。C++的面向对象思想与windows可视化窗口非常匹配。
Windows程序开始执行后,Windows为该程序建立一个「消息队列」。这个消息队列用来存放该程序可能建立的各种不同窗口的消息。程序中有一小段程序代码,叫做「消息循环」,用来从队列中取出消息,并且将它们发送给相应的窗口消息处理程序。有些消息直接发送给窗口消息处理程序,不用放入消息队列中。
Windows窗口与消息相关推荐
- Windows 窗口发送消息参数详解
窗口发送消息参数详解 // 窗口.发送消息 函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果中文函数原型: 发送消息(hwnd,msg,wparam ...
- VC++使用SDL定时器替代Windows窗口定时器消息(附源码)
VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从 ...
- 初学Windows编程笔记1——窗口和消息
Windows程序设计(第五版) 第三章 窗口与消息 源程序见原书39页 在Visual Studio 2010 C++下测试 //------------------Start----------- ...
- MFC中Windows窗口消息循环及多线程之间关系
Windows中一个进程可以包含多个线程,由多个线程组成.在Windows应用程序中,窗体是由"UI线程(User Interface Thread)"的特殊类型的线程创建的 ...
- 窗口封装类与Windows窗口实例的关系-3、CWnd如何处理窗口消息
在窗口消息处理方面,CWnd使用了窗口子类化和消息映射机制,关于消息映射的知识将在第9章详述,下面着重阐述CWnd是如何应用子类化处理窗口消息的.其实,在6.2节的示例中,CBaseWnd已经使用了与 ...
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
版本:VS2015 语言:C++ 本来想昨天写个消息窗口的内容,讲一些好玩的东西,不过没有时间了,就放到一起了. 今天正好把书的第二章看完了,感觉良好,Windows的编程确实难度要高,一下子会有一大 ...
- Windows窗口消息大全,全不全自己看
1 Windows窗口消息大全,全不全自己看 2 3 // 4 #include "AFXPRIV.H"//消息值的定义来源 5 #include "Dde.h" ...
- Windows窗口消息介绍
Windows窗口消息介绍 // #include "AFXPRIV.H"//消息值的定义来源 #include "Dde.h"//DDE消息值的定义来源 #i ...
- C#通过Windows API捕获窗,获取窗口文本(FindWindow、GetWindowText),附录:Windows窗口消息大全、Windows API大全
文章目录 一.前言 二.使用Spy++工具分析窗口 三.C#通过Windows API捕获窗口,获取窗口文本 四.附录:Windows窗口消息 五.Windows API大全 1.API之网络函数 2 ...
最新文章
- SpringBoot 用RestTemplate 优雅的发送HTTP请求,注意需要@Autowired注入后才能用
- shell读取文件的每一行
- 一张图学会python3语法-一张图理清 Python3 所有知识点
- 数组中只出现一次的数字(python解法)
- MISRA C指导指南解读系列1(MISRA C是什么)
- FPGA——HLS编程入门
- Python 爬虫批量爬取网页图片保存到本地
- mysql批量导出_mysql批量导出导入
- 地球经纬度转换为unity球面坐标
- 使用Cesium的 Material (材质)绘制警戒线
- macOS 控件教程(1)
- 为ARM处理器实现Machine Forth
- 201704 创建财务凭证函数
- 每一个计算机主机有且只能有一块硬盘,2014年《计算机基础》期中试卷.doc
- Java输出九九乘法表(99乘法)
- java 判断一个数是否是素数详解
- 国内云存储厂商酷盘宣布获2000万美元B轮投资
- Oracle根据时间查询
- 在vscode里配置ESLint和Prettier
- 刘锋:互联网50年,从“巨网”到“大脑”
热门文章
- Photoshop CS6基本知识1
- 物联网技术概论:1~7章汇总(西安交通大学)
- NLP-问答系统流程
- 百度地图 点击地图类型控件切换普通地图、卫星图、三维图、混合图(卫星图+路网),右下角是缩略图
- ACM菜鸟入门培训1
- error: open(“file.xlsx“): Permission denied
- 通过调用小黄鸡接口进行自聊天
- html5 scrollheight,JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记...
- android项目打包apk,Android Studio将程序打包成APK的步骤详解
- 正运动EtherCAT总线控制器在 并联机械手上的应用