GetMessage(), PeekMessage(), PostMessage(), SendMessage()

(1)GetMessage () and PeekMessage ()
      他们的函数原型如下:
BOOL GetMessage (
      LPMSG lpMsg, // pointer to structure for message
      HWND hWnd, // handle to window
      UINT wMsgFilterMin, // first message
      UINT wMsgFilterMax ) // last message
BOOL PeekMessage (
      LPMSG lpMsg, // pointer to structure for message
      HWND hWnd, // handle to window
      UINT wMsgFilterMin, // first message
      UINT wMsgFilterMax, // last message
      UINT wRemoveMsg ); // removal flags
      GetMessage 其唯一用途就是从事件对列中获得消息,并进行处理。当程序在等待通过 GetMessage 传递的消息时,主事件循坏基本上是锁定的。如果消息队列中没有消息,则GetMessage()不会返回,一直等待。即是同步的。
      那么,如果我们要处理实时的事件循环该怎么办呢?Windows 为我们提供了另一个函数 PeekMessage,他们的原型几乎是一样的,唯一的不同是 PeekMessage 比 GetMessage 多了一个参数:UINT wRemoveMsg // removal flags。对于wRemoveMsg ,有效的标志有:
PM_NOREMOVE,PeekMessage 处理之后,消息没有从序列中去除;
PM_REMOVE,PeekMessage 处理之后,消息已经从序列中去除;
通过利用PeekMessage 来判断消息序列中是否有消息,如果有,就处理它;否则继续处理其他的逻辑。

(2)SendMessage () and PostMessage ()
LRESULT SendMessage (

       HWND hWnd, // handle of destination windonw
       UINT Msg, // message to send
       WPARAM wParam, // first message parameter
       LPARAM lParam); // second message parameter
BOOL PostMessage (

       HWND hWnd, // handle of destination windonw
       UINT Msg, // message to send
       WPARAM wParam, // first message parameter
       LPARAM lParam); // second message parameter
SendMessage 向窗口传递一个要求立即处理的消息。接收窗口处理完该消息后,该函数便紧接着 WinProc 返回,是同步的。
PostMessage 将消息发往窗口的消息序列,而后直接返回。是异步的。
(3)所以从同步异步来看,GetMessage 和SendMessage 是一对,PeekMessage 与PostMessage 是一对。

 

参考原文:http://www.cnblogs.com/chio/archive/2007/08/02/840562.html

你可能感兴趣的:(windows,structure)