应用程序
Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视化的交互方式,窗口是由线程(Thread)创建的.Windows系统通过消息机制来管理交互,消息(Message)被发送,保存,处理,一个线程会维护自己的一套消息队列(Message Queue),在发生输入事件之后,Windows将事件转换为一个「消息」并将消息放入程序的消息队列中.程序通过执行一块称之为「消息循环」的程序代码从消息队列中取出消息并调用窗体的回调函数处理消息,这样不仅保持线程间的独占性.而且队列的以先进先出方式处理消息来实现异步通信.
但是一般来说不是所有的消息都是需要程序处理的.而是针对其中某些特定的消息进行处理.即程序只关心自己想关心的问题而不会多去处理其他不必要的信息.但是系统并不会知道什么是程序所关心的消息,什么是程序不关心的消息,所以它会把所有的消息都发送给程序.那么程序便要从中塞选出自己想要处理的消息,然后把自己不想理会的消息过滤给系统,让系统去帮助处理这些不需要的消息(即系统提供的默认的窗口过程函数 DefWindowProc).那么一般程序的窗体过程具体流程如下:
上面可以看出窗体可以接收和处理消息的特性.然而控件其实也都是窗口.但是每个控件却不一定都具有接收和处理消息的功能.因为在系统中只有具有句柄(一个系统自动维护的32位的数值,是作为系统对象的简单的唯一性的标识)的窗口才具有处理消息的特性.因为只有具有句柄的窗口才能独立存在作为一窗体存在.作为其他控件的容器.而没有句柄的控件,如Label,是不能独立存在的,只能作为窗口控件的子控件,它不能绘制自身,只能依靠父窗体将它绘制来.
消息
-
消