|
ows所使用的架构。当使用者改变视窗的大小时,Window给程式发送一个讯息指出新视窗的大小。然後程式就可以调整视窗中的内容,以回应大小的变化。
「Windows给程式发送讯息。」我们希望读者不要对这句话视而不见。它到底表达了什么意思呢?我们在这里讨论的是程式码,而不是一个电子邮件系统。作业系统怎么给程式发送讯息呢?
其实,所谓「Windows给程式发送讯息」,是指Windows呼叫程式中的一个函式,该函式的参数描述了这个特定讯息。这种位於Windows程式中的函式称为「视窗讯息处理程式」。
无疑,读者对程式呼叫作业系统的做法是很熟悉的。例如,程式在打开磁片档案时就要使用有关的系统呼叫。读者所不习惯的,可能是作业系统呼叫程式,而这正是Windows物件导向架构的基础。
程式建立的每一个视窗都有相关的视窗讯息处理程式。这个视窗讯息处理程式是一个函式,既可以在程式中,也可以在动态连结程式库中。Windows通过呼叫视窗讯息处理程式来给视窗发送讯息。视窗讯息处理程式根据此讯息进行处理,然後将控制传回给Windows。
更确切地说,视窗通常是在「视窗类别」的基础上建立的。视窗类别标识了处理视窗讯息的视窗讯息处理程式。使用视窗类别使多个视窗能够属於同一个视窗类别,并使用同一个视窗讯息处理程式。例如,所有Windows程式中的所有按钮均依据同一个视窗类别。这个视窗类别与一个处理所有按钮讯息的视窗讯息处理程式(位於Windows的动态连结程式库中)联结。
在物件导向的程式设计中,物件是程式与资料的组合。视窗是一种物件,其程式是视窗讯息处理程式。资料是视窗讯息处理程式保存的资讯和Windows为每个视窗以及系统中那个视窗类别保存的资讯。
视窗讯息处理程式处理给视窗发送讯息。这些讯息经常是告知视窗,使用者正使用键盘或者滑鼠进行输入。这正是按键视窗知道它被「按下」的奥妙所在。在视窗大小改变,或者视窗表面需要重画时,由其他讯息通知视窗。
Windows程式开始执行後,Windows为该程式建立一个「讯息伫列」。这个讯息伫列用来存放该程式可能建立的各种不同视窗的讯息。程式中有一小段程式码,叫做「讯息回圈」,用来从伫列中取出讯息,并且将它们发送给相应的视窗讯息处理程式。有些讯息直接发送给视窗讯息处理程式,不用放入讯息伫列中。
如果您对这段Windows架构过於简略的描述将信 |