Windows编程(3)
消息的处理
我已经说过消息在窗口里的作用了,下面让我们来仔细学习一下它。处理消息的函数结构如下:
LRESULT CALLBACK MsgHandler( 【有时被命名为WndProc,随便你】
HWND hwnd, // window handle
UINT msg, // the message identifier
WPARAM wparam, // message parameters
LPARAM lparam // more message parameters
);
这个LRESULT类型要求返回一个32位的整数。实际取值依赖于消息,但是这个值很少在应用程序代码中得到应用。以前我们谈到过一点CALLBACK协定,它的参数很简单:
※ HWND hwnd:是接收消息的窗口的句柄,也是由CreateWindowEx()函数返回的句柄。
※ UINT msg:这是一个消息标识符,都是以WM_打头的符号常量,意思是“Windows Message”。很多的,这里只介绍一些常用的:
◎ WM_ACTIVATE:一个新窗口被激活。
◎ WM_CLOSE:一个窗口被关闭。
◎ WM_COMMAND:一个菜单功能被选择。
◎ WM_CREATE:一个窗口被建立。
◎ WM_LBUTTONDBLCLK:鼠标左键被双击。
◎ WM_LBUTTONDOWN:鼠标左键被按下。
◎ WM_MOUSEMOVE:鼠标被移动。
◎ WM_MOVE:一个窗口被移动。
◎ WM_PAINT:窗口的一部分需要重画。
◎ WM_RBUTTONDBLCLK:鼠标的右键被双击。
◎ WM_RBUTTONDOWN:鼠标的右键被按下。
◎ WM_SIZE:窗口的大小被改变。
◎ WM_USER:干你想干的。
※ WPARAM wparam,LPARAM lparam:消息参数。它们提供有关消息的附加信息,这两个值对于每条消息来说都是特定的。
你要把所有要发生的消息都写进程序代码的话,我想你可能已经累疯了。我想我会的。感谢上帝,Windows提供了默认消息处理,如果你没有任何特殊的消息需要处理了,你总是要用DefWindowPorc()函数的,下面给一个最简单的例子,没有任何特定的消息要处理的例子:
LRESULT CALLBACK MsgHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
return(DefWindowProc(hwnd, msg, wparam, lparam));
}
简单吧!但通常你都需要处理一些自己的消息,你要写自己的程序代码,然后返回0,来告诉程序你干完了。下面是一个例子,当窗口建立时,你调用了一个初始化的函数Initialize_Game(),然后返回0,最后告诉程序自己处理那些默认的消息吧:
LRESULT CALLBACK MsgHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
if (msg == WM_CREATE)
{
Initialize_Game();
return(0);
}
return(DefWindowProc(hwnd, msg, wparam, lparam));
}
你很可能需要一个“switch”结构来手动完成你想要控制的消息,然后把剩下的交给DefWindowProc()去做。大功告成前,我不得不提醒您一件事,就是怎样使你的消息控制得到响应呢?
this entry was posted on 星期一, f 1747, 06 at 7:10 pm and is filed under con-bak. you can follow any responses to this entry through the rss 2.0 feed. you can leave a response, or trackback from your own site.