现在的位置: 首页 > 综合 > 正文

SendMessage与PostMessage的区别

2014年09月07日 ⁄ 综合 ⁄ 共 1555字 ⁄ 字号 评论关闭

SendMessage将指定的消息发送到一个窗口或多个窗口。SendMessage为这个指定的消息调用窗口处理程序,直到窗口处理完这个程序后才会返回。和SendMessage函数相比,PostMessage函数发送一个消息到线程消息对列中,并立即返回。

函数原型:LRESULT SendMessageHWND hWndUINT MsgWPARAM wParamLPARAM IParam);

    参数:

    hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。

    Msg:指定被发送的消息。

    wParam:指定附加的消息指定信息。

    IParam:指定附加的消息指定信息。

    返回值:返回值指定消息处理的结果,依赖于所发送的消息。

    备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。

    如果指定的窗口是由调用线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。

    Windows CEWindows CE不支持Windows桌面平台支持的所有消息。使用SendMesssge之前,要检查发送的消息是否被支持。

    速查:Windows NT3.1及以上版本:Windows95及以上版本;Windows CE1.0及以上版本;头文件:winuser.h;输入库:user32.libUnicode:在Windows NT环境下以UnicodeANSI方式实现。

PostMessage

    函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessagePeekMessage取得。

    函数原型:B00L PostMessageHWND hWndUINT MsgWPARAM wParamLPARAM lParam);

    参数

    hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:

    HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。

    NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。

    Msg:指定被寄送的消息。

    wParam:指定附加的消息特定的信息。

    IParam:指定附加的消息特定的信息。

    返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。

    备注:需要以 HWND_BROADCAST方式通信的应用程序应当用函数 RegisterwindwosMessage来获得应用程序间通信的独特的消息。

 

以上是SendMessage与PostMessage的区别,下面我主要给大家说一下我使用的心得。

 

在接收SendMessage发的消息时,最好要有一个消息响应函数,不然PreTranslateMessage是收不到SendMessage发送的消息的,而接收PostMessage的时候可以不增加它说对应的消息处理函数,因为他会先到达PreTranslateMessage,但是最好还是增加一个消息处理函数比较好。

抱歉!评论已关闭.