更新时间:2022-07-23 19:20
视窗讯息处理程式视窗讯息处理程式
注册视窗类别,建立视窗,然後在萤幕上显示视窗,程式进入讯息回圈,然後不断从讯息伫列中取出讯息来处理。
实际的动作发生在视窗讯息处理程式中。视窗讯息处理程式确定了在视窗的显示区域中显示些什么以及视窗怎样回应使用者输入。
在HELLOWIN中,视窗讯息处理程式是命名为WndProc的函式。视窗讯息处理程式可任意命名(只要求不和其他名字发生冲突)。一个Windows程式可以包含多个视窗讯息处理程式。一个视窗讯息处理程式总是与呼叫RegisterClass注册的特定视窗类别相关联。CreateWindow函式根据特定视窗类别建立一个视窗。但依据一个视窗类别,可以建立多个视窗。
视窗讯息处理程式总是定义为如下形式:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
注意,视窗讯息处理程式的四个参数与MSG结构的前四个栏位是相同的。第一个参数hwnd是接收讯息的视窗的代号,它与CreateWindow函式的传回值相同。对於与HELLOWIN相似的程式(只建立一个视窗),这个参数是程式所知道的唯一视窗代号。如果程式是依据同一视窗类别(同时也是同一视窗讯息处理程式)建立多个视窗,则hwnd标识接收讯息的特定视窗。
第二个参数与MSG结构中的message栏位相同,它是标识讯息的数值。最後两个参数都是32位元的讯息参数,提供关于讯息的更多资讯。这些参数包含每个讯息型态的详细资讯。有时讯息参数是两个存放在一起的16位元值,而有时讯息参数又是一个指向字串或资料结构的指标。
程式通常不直接呼叫视窗讯息处理程式,视窗讯息处理程式通常由Windows本身呼叫。通过呼叫SendMessage函式,程式能够直接呼叫它自己的视窗讯息处理程式。我们将在後面的章节讨论SendMessage函式。