🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在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**将指定的消息传给窗口过程函数后立即返回。