简单的说:
1.
PeekMessage是到消息队列中查找符合条件的消息,由调用者决定是否将找到的消息取出来,而且该函数不管消息队列中是否有消息,都返回!
GetMessage是到消息队列中直接取符合条件的消息,如果没有就等待不返回!
如果要详细的知道,到MSDN\Technical Articles\Windows Platform\Windows Management\中查看《GetMessage and PeekMessage Internals》文章;2.
通常TranslateMessage和DispatchMessage需要一起来用!
TranslateMessage(&msg);  //当msg是VIRTUAL KEY消息时转换成字符ASCII消息;
DispatchMessage(&msg);   //查找并调用消息处理函数;

解决方案 »

  1.   

    1.如Holly所说,二者区别即是否立即返回,所以通常在需要响应Idle消息时使用PeekMessage。
    2.TranslateMessage是用来字符消息的,如将WM_KEYDOWN、WM_KEYUP消息转换成WM_CHAR消息。
      

  2.   

    GetMessage是win3.x非强制性多任务的关键,也就是说,如果信息队列上没有我的信息,我就把
    机会让给别人。通过程序之间彼此协调让步的方式,达到多任务能力。而win9x and winNT具备强制性多任务能力,不再非靠GetMessage释放CPU控制权不可。
      

  3.   

    哈,这回你可问对人了:
    peekmessage主要的作用是可以处理程序的闲置时间onidle(就是系统没有任何信息等待处理的时间)举个例子:
          while(TRUE)
        {
         if( peekmessage($msg,null,0,0,PM_REMOVE))
           {translatemessage($msg);
           dispatchmessage($msg);
           }
          else
          {     
            onidle();
          }
          };
    peekmessage和getmessage都是到系统中去抓信息,当抓不到操作系统会把他虚悬,然后去执行其他程序。如果操作系统再次回头时发现消息队列中仍是空的,这时api函数就不同了:
    getmessage:会过门不入,于是操作系统回去照顾其他人;
    peekmessage:会取回控制权,使程序得以执行一段时间,于是上述程序进入onidle函数;
    这就是他们的区别;
    对于translatemessage是将键盘信息转化,产生虚拟键消息,就是wm_消息,但不产生ASKII码。
    而dispatchmessage是投递消息,他通过user组的帮助把消息传到窗口处理函数去了。