VC++中窗口过程函数及其消息发送、响应机制介绍
最后更新于:2022-04-01 20:34:58
在VC++中,窗口过程函数是应用程序定义的一个函数,主要功能是处理发送给窗口的消息。窗口过程函数的定义是:virtual LRESULT WindowProc( UINT message, WPARAM wParam,LPARAM lParam ); 其中,message指定消息类型,wParam和lParam指定其余的消息特定信息,内容与message参数值有关。
在应用程序中窗口过程函数及其消息发送、响应机制的使用,能够方便程序集中处理各类消息,使得整个程序的架构更加合理、清晰。
下面结合实例详细讲述窗口过程函数及其消息发送、响应机制的使用方法。(完整的实例可在我的CSDN资源中下载:[http://download.csdn.net/detail/margin1988/4570359](http://download.csdn.net/detail/margin1988/4570359))
(1)自定义消息:
在Resource.h文件中自定义消息:
~~~
#define WM_MYMSG 2000
~~~
(2)添加窗口过程函数的声明和实现体:
1)在.h文件中添加窗口过程函数声明:
~~~
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
~~~
2)在.cpp文件中添加窗口过程函数实现体:
~~~
LRESULT CPoint18Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){
switch (message){
case WM_MYMSG:
MessageBox("WindowProc收到并处理了自定义的WM_MYMSG消息");
break;
}
return CDialog::WindowProc(message,wParam,lParam);
}
~~~
(3)发送消息的方式比较:
~~~
this->SendMessage(WM_MYMSG,0,0);
//this->PostMessage(WM_MYMSG,0,0);
//this->SendNotifyMessage(WM_MYMSG,0,0);
~~~
注:这三个函数都可以将指定的消息发送到某个窗口,但是这三种消息的发送方式存在如下的区别:**SendMessage**立即调用窗口过程函数,而且直到窗口过程函数处理完消息后才返回。**PostMessage**则是将指定的消息寄送到窗口消息队列后立即返回。对于**SendNotifyMessage**来说**,**如果窗口是调用线程创建的,**SendNotifyMessage**为该窗口调用窗口过程函数,并且等待窗口过程函数处理完消息后才返回;如果窗口是由不同的线程创建的,**SendNotifyMessage**将指定的消息传给窗口过程函数后立即返回。
';