MFC 消息发送机制

CWnd::SendMessage(UINT message, WPARAM wParam, LPARAM lParam)

根据普遍的定义是SendMessage直到消息被处理完毕后才返回,而PostMessage是把一条消息投放到创建hWnd窗口的线程的消息队列中。函数不等消息被处理就立即返回。

在实际应用中,注意到有

lResult = pWnd->SendMessage(WM_NOTIFY, dispInfo.hdr.idFrom, (LPARAM)&dispInfo);

的写法。(后面两个参数请忽略)

第一个参数WM_NOTIFY代表只发给它的父窗口,再要发给父窗口的父窗口或主框架窗口等上级窗口,必须在DefWindowProc中用如下语句进行转发

    switch(message)
    {
        case WM_NOTIFY:
             theApp.GetMainFrame()->SendNotifyMessage(message, wParam, lParam);
             break;
        default:
             break;
    }

代码来源于http://blog.chinaunix.net/uid-103046-id-2964285.html


在MFC中SendMessage函数封装到CWnd类中:
CWnd::SendMessage
LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
返回值:消息处理的结果;它的值依赖于发送的消息。
参数:
message指定了要发送的消息;
wParam和lParam指定了与消息有关的附加信息。
wParam和lParam是Windows消息机制的两个最重要参数,整个Windows依靠这两个参数传递各种各样的消息。
首先是wParam,它表示此次的消息类型是什么。是键盘?是鼠标?键盘里又分按下还是抬起,鼠标里又分是单击还是双击,等等。
lParam是一个指针,它指向本条消息所存储的信息的内存区域的首地址,很显然,这个地址存放的东西是很灵活的,比如鼠标消息,那么这里可能存放的是各键的状态或者光标的X,Y座标。换成键盘消息,则是键码等等。
总之,在Windows系统消息处理中,wParam参数区分了类别,lParam参数存放了该类别所存储的信息。
对于自定义消息,我们把消息Msg投递(Send或Post)到 hWnd,其对应的消息处理函数一般为afx_msg LRESULT OnMsg(WPARAM,LPARAM);格式,故我们可以自定义这两个参数,以传递所需参数(一般为常规类型、结构或类的指针)到指定窗口线程。

来源于http://blog.csdn.net/ksq2010/article/details/8254872


猜你喜欢

转载自blog.csdn.net/Vis_Stu/article/details/58593397