牛骨文教育服务平台(让学习变的简单)

VC++中窗口过程函数及其消息发送、响应机制介绍

在VC++中,窗口过程函数是应用程序定义的一个函数,主要功能是处理发送给窗口的消息。窗口过程函数的定义是:virtual LRESULT WindowProc( UINT message, WPARAM wParam,LPARAM lParam ); 其中,message指定消息类型,wParam和lParam指定其余的消息特定信息,内容与message参数值有关。

在应用程序中窗口过程函数及其消息发送、响应机制的使用,能够方便程序集中处理各类消息,使得整个程序的架构更加合理、清晰。

下面结合实例详细讲述窗口过程函数及其消息发送、响应机制的使用方法。(完整的实例可在我的CSDN资源中下载: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将指定的消息传给窗口过程函数后立即返回。