windows消息系统是由三部分组成
  消息队列
  消息循环
  窗口过程一个消息从发生到处理的过程如下:
事件发生->消息队列->消息循环->事件处理消息传递由Tobject.DIspach()重载实现,消息发送其中sendmessage()发送到应用程序后有返回,而postmessage()无返回.
另外,对于广播消息,有Broadcast()函数,也可以用如下形式:
Sendmessage(HWND_BROADCAST,TMessage,0,0);实现
最近学的,不知道理解的对不对,请指点
能不能给个这些函数使用的例子???还有,以WM开头的是窗口消息,那么以EM开头的是什么消息??还有其他种类吗?

解决方案 »

  1.   

    sendmessage()//相当于执行过程,立即执行,立即返回结果
    postmessage//将消息发送到消息队列,直到其前面的消息处理完毕后再执行
      

  2.   

    大家能不能给我个例子
    对于VCL内部如何对消息进行封装我还不大懂
      

  3.   

    Perform 相当于用 CallDefineWindowProc
      

  4.   

    窗体对象
                                                              |
                                                              |
    SendMessage()-------------------------------------->>WinProc地址
                               ^
                               |
                               |
                             消息泵
                               ^
                               |
                               |
                               |   
    PostMessage()-----------消息n+1
                            消息n+2
                            消息n+3
     
                         [消息]
    perform:   控件1------------->控件2
      

  5.   

    窗体对象
                                                              |
                                                              |
    SendMessage()-------------------------------------->>WinProc地址
                               ^
                               |
                               |
                             消息泵
                               ^
                               |
                               |
                               |   
    PostMessage()-----------消息n+1
                            消息n+2
                            消息n+3
     
                         [消息]
    perform:   控件1------------->控件2
      

  6.   

    楼上的意思是不是说
    sendmessage()是通过控制句柄来实现
    postmessage()还要通过消息泵转化perform()就可以直接传递??
      

  7.   

    function TControl.perform(Msg: Cardinal;WParam,LParam:LongInt);: LongInt;是Delphi自己的发送消息的方式function SendMessage(hWnd: HWND;Msg: UINT;wParam: WPARAM;lParam :LPARAM):LRESULT; stdcall; 和
    function PostMessage(hWnd: HWND;Msg: UINT;wParam: WPARAM;lParam :LPARAM):Bool;
    stdcall; 是API函数
      

  8.   

    楼主,你悟解我了。
    SendMessage():发送一个消息,系统直接调用窗口进程。通信是即时的,直到窗口进程为调用函数返回一个结果,应用程序才能继续。PostMessage():寄送一个消息时,系统发送到拥有该窗口的应用程序消息队列中。消息队列是系统定义的一个内存快,用于临时存贮消息,或是把消息直接发送窗口过程。每个窗口维护自己的消息队列,并从中取出消息,利用窗口函数进行处理。调用函数发送消息后就立即返回,但结果只是表示消息寄送成功与否,而不表示调用窗口进程的结果。
    这个perform嘛。
    看看delphi的定义。
    WindowProc(Message); 
    他把一个指定的消息交给窗口(控件窗口)处理函数。function TControl.Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;
    var
      Message: TMessage;
    begin
      Message.Msg := Msg;
      Message.WParam := WParam;
      Message.LParam := LParam;
      Message.Result := 0;
      if Self <> nil then WindowProc(Message);
      Result := Message.Result;
    end;
      

  9.   

    1、SendMessage,由系统将消息派遣给窗口对应的窗口过程,不进入消息队列,并等待消息处理完毕后再返回。
    2、PostMessage,将消息放入窗口所属引用程序的消息队列,立即返回。
    3、Perform是VCL自己定义的,直接调用VCL控件的窗口过程,等待消息处理完毕后返回。WM表示Windows Message,即Windows标准消息。EM、LB、CB等是Windows的一些分类消息,分别对应于Eidt/Memo/RichEdit、ListBox、ComBox等Windows标准控件。
    另外,VCL内部也根据一些需要定义了消息。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  10.   

    谢谢
    初学delphi ,没有人指点,幸好还有CSDN
    能不能帮我介绍关于这方面的比较好的书???
      

  11.   

    找M$的msdn
    现在很多书都是在msdn上copy些例子,然后骗我们钱。