LRESULT CDemo_SendmessageDlg::OnTest(WPARAM   wParam,LPARAM   lParam)
{  static int i=0;
 while (i<100000)
 {
//  Sleep(100);
  ++i;
  m_Stredit.Format("%d",i);
  UpdateData(FALSE);
 }
return 0;
}void CDemo_SendmessageDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
  int i=::PostMessage(m_hWnd,WM_Test,0,0); //SendMessage
 CString Str;
 Str.Format("%d",i);
 MessageBox(Str);
}这儿的测试PostMessage与SendMessage的效果一样
都是OnTest函数返回后,才能够得到结果..
我就郁闷了,这和参考文档上写的不一样呀,文档说PostMessage将消息发送到消息队列后就返回,
但这儿他并没有返回哈...
想通过发送消息的方式来调用函数实现功能所以提前测试了看看用哪个函数,但这两个函数结果都一样的,我晕了....
另外多问一句,如果频繁低使用SendMessage或者PostMessage发送消息对程序的效率会造成影响吗??

解决方案 »

  1.   

    LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);   参数:   hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。   Msg:指定被发送的消息。   wParam:指定附加的消息指定信息。   IParam:指定附加的消息指定信息。   返回值:返回值指定消息处理的结果,依赖于所发送的消息。   备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。 
      

  2.   

    函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);   参数   hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:   HWND_BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。   NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。   Msg:指定被寄送的消息。   wParam:指定附加的消息特定的信息。   IParam:指定附加的消息特定的信息。   返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。   备注:需要以 HWND_BROADCAST方式通信的应用程序应当用函数 RegisterwindwosMessage来获得应用程序间通信的独特的消息。 
      

  3.   

    这儿的测试PostMessage与SendMessage的效果一样
    都是OnTest函数返回后,才能够得到结果..
    我就郁闷了,这和参考文档上写的不一样呀,文档说PostMessage将消息发送到消息队列后就返回,
    但这儿他并没有返回哈...
    ==================
    你从哪儿判断出PostMessage没有直接返回啊?
      

  4.   

    他如果返回了,按说应该立马执行下面的弹出对话框的语句的呀...
    呵呵,我是这样判断的...
    不然的话,他和SendMessage咋区分他们的区别??
      

  5.   

    是啊...他是执行了OnTest函数返回后,他才弹出来那个对话框的..
      

  6.   

    是啊...他是执行了OnTest函数返回后,他才弹出来那个对话框的..
    =========
    应该是立即返回的!
      

  7.   

    深入解析SendMessage、PostMessage
      

  8.   

    既然消息已经被发出了,那么就要等待OnTest执行,因为程序只有一个主线程,而并不会一边运行OnTest,一边继续往下弹出MessageBox
      

  9.   

    就算PostMessage能够立即返回(当然,它确实是立即返回的),你这个例子消息处理函数一收到消息就是一个独占的循环,会影响界面的响应的。例子有问题,不能用来证明PostMessage有问题。
      

  10.   

    深入解析SendMessage、PostMessage