关于windows的总体结构:
进行windows程序设计,实际上是在进行一种物件导向的程序设计(OOP)。
窗口就是一种物件,窗口中可能有各种按钮、控件等这些都可以称为物件。作为物件,使用者会在屏幕上看到这些窗口,并可以通过键盘和鼠标直接与它们进行交互操作,更有趣的是,窗口以消息的形式接收窗口的输入,窗口也通过消息与其他窗口通信。
1、窗口
windows中窗口有确切的含义,它是指屏幕上的一块矩形区域,它接收使用者的输入并以文字或图形的格式显示输出内容。
2、消息
例子:用户通过鼠标拖动应用程序窗口的边框来改变窗口的大小,通常,程序窗口中的内容也会有相应的调整。分析:首先,应该想到鼠标拖动的动作,应该最先由操作系统发觉,因为操作系统管理控制计算机资源;
其次,应用程序窗口中的内容发生改变,这是应用程序本身做的动作,因为操作系统不会知道具体的应用程序应该显示什么内容和应该怎么显示,(并不是它不能做,而是它不知道该怎么做)。
然后,再想一想,鼠标拖动和窗口中的内容改变都发生了,那么应用程序是怎么知道使用者拖动鼠标改变窗口大小这件事呢?显然是操作系统通过某种机制告诉了应用程序。
本人想不出好方法,庆幸的是我知道windows是怎么做的。
window架构是这样实现的,当使用者通过鼠标改变窗口的大小时,windows操作系统给应用程序发送一个消息指出新窗口的大小,然后应用程序就可以改变窗口的大小,以回应大小的改变。
然后,继续思考,windows是怎样向应用程序发送消息的?当然它不会写信,也不会打电话。
其实,所谓的“windows给应用程序发消息”,是指windows调用应用程序的一个函数,该函数的参数描述了这个特定信息,窗口消息处理函数,(我的理解:应该就是窗口过程吧)
3、回调函数
不管你习不习惯,它就在那里,回调函数是指操作系统调用应用程序的函数,其实你写的main函数不就是由系统调用的吗?
操作系统呼叫应用程序,这正是windows物件导向架构的基础。
应用程序建立的每一个窗口都有相关的窗口处理函数(窗口过程),窗口过程是一个函数,既可以在程序中,也可以在动态链接库中,windows通过呼叫窗口过程来给窗口发送消息,窗口过程根据此消息进行处理,然后将控制传回给windows。
4、物件导向
在物件导向程序设计中,物件是程序和资料的组合。窗口是一种物件,其程序是窗口消息处理函数(窗口过程)。资料是窗口过程保存的资源和windows为每个窗口以及系统中的那个窗口类别保存的资源。
5、消息汞
窗口过程给窗口发送消息,这些消息经常是告知窗口,使用者正使用键盘或者鼠标进行输入,这正是按键窗口知道它被按下的奥妙所在。
Windows程序开始执行后,Windows为该程序建立一个消息队列。这个消息队列用来存放该程序可能建立的各种不同的窗口的消息,程序中有一小段程序代码,称作“消息汞”,用来从队列中取出消息,并将它们发送给相应的窗口消息处理函数(窗口过程)。有些消息直接发送给窗口消息处理函数(窗口过程),不用放入消息队列中。
总结:
windows程序设计是物件导向程序设计,Window窗口是一种物件它有程序和资源组成,资源是该窗口的存储信息,程序是窗口过程。windows应用程序在运行时,系统为它建立消息队列,用来接收系统发来的消息,并通过消息汞将消息传递给窗口过程,窗口过程进行消息的处理。窗口是建立在窗口类别(WNDCLASS)的基础上的。