fopen函式最终通过呼叫作业系统来打开档案,这一点问题也没有。
但是Windows不同,尽管Windows有1000个以上的函式可供程式呼叫,但Windows也呼叫使用者程式,比如前面定义的视窗讯息处理程式WndProc。视窗讯息处理程式与视窗类别相关,视窗类别是程式呼叫RegisterClass注册的。依据该类别建立的视窗使用这个视窗讯息处理程式来处理视窗的所有讯息。Windows通过呼叫视窗讯息处理程式对视窗发送讯息。
在第一次建立视窗时,Windows呼叫WndProc。在视窗关闭时,Windows也呼叫WndProc。视窗改变大小、移动或者变成图示时,从功能表中选择某一项目、挪动卷动列、按下滑鼠按钮或者从键盘输入字元时,以及视窗显示区域必须被更新时,Windows都要呼叫WndProc。
所有这些WndProc呼叫都以讯息的形式进行。在大多数Windows程式中,程式的主要部分都用来处理讯息。Windows可以发送给视窗讯息处理程式的讯息通常都以WM开头的名字标识,并且都在WINUSER.H表头档案中定义。
实际上,从程式外呼叫程式内的常式这一种做法,在传统的程式设计中并非前所未闻。C中的signal函式可以拦截Ctrl-C中断或作业系统的其他中断。为MS-DOS编写的老程式中经常有拦截硬体中断的程式码。
但在Windows中,这种概念扩展为包括一切事件。视窗中发生的一切都以讯息的形式传给视窗讯息处理程式。然後,视窗讯息处理程式以某种方式回应这个讯息,或者将讯息传给DefWindowProc,进行内定处理。
在HELLOWIN中,视窗讯息处理程式的wParam和lParam参数除了作为传递给DefWindowProc的参数外,不再有其他用处。这些参数给出了关於讯息的其他资讯,参数的含义与具体讯息相关。
让我们来看一个例子。一旦视窗的显示区域大小发生了改变,Windows就呼叫视窗的视窗讯息处理程式。视窗讯息处理程式的hwnd参数是改变大小的视窗的代号(请记住,一个视窗讯息处理程式能处理依据同一个视窗类别建立的多个视窗的讯息。参数hwnd让视窗讯息处理程式知道是哪个视窗在接收讯息)。参数message是WM_SIZE。讯息WM_SIZE的参数wParam的值是SIZE_RESTORED、SIZE_MINIMIZED、SIZE_MAXIMIZED |