1. 程式人生 > >VC++中 PostMessage和SendMessage的區別

VC++中 PostMessage和SendMessage的區別

  函式功能:該函式為一個訊息檢查執行緒訊息佇列,並將該訊息(如果存在)放於指定的結構。
  函式原型:BOOL PeekMessage(LPMSG IpMsg,HWND hWnd,UINT wMSGfilterMin,UINT wMsgFilterMax,UINT wRemoveMsg);
  引數:
  lpMsg:接收訊息資訊的MSG結構指標。
  hWnd:其訊息被檢查的視窗的控制代碼。
  wMsgFilterMin:指定被檢查的訊息範圍裡的第一個訊息。
  wMsgFilterMax:指定被檢查的訊息範圍裡的最後一個訊息。
  wRemoveMsg:確定訊息如何被處理。此引數可取下列值之一:
  PM_NOREMOVE:PeekMessage處理後,訊息不從佇列裡除掉。
  PM_REMOVE:PeekMessage處理後,訊息從佇列裡除掉。
  可將PM_NOYIELD隨意組合到PM_NOREMOVE或PM_REMOVE。此標誌使系統不釋放等待呼叫程式空閒的執行緒。
  預設地,處理所有型別的訊息。若只處理某些訊息,指定一個或多個下列值:
  PM_QS_INPUT:Windows NT5.0和Windows 98:處理滑鼠和鍵盤訊息。
  PM_QS_PAINT:Windows NT 5.0和Windows 98:處理畫圖訊息。
  PM_QS_POSTMESSAGE:Windows NT 5.0和Windows 98:處理所有被寄送的訊息,包括計時器和熱鍵。
  PM_QS_SENDMESSAGE:Windows NT 5.0和Windows 98:處理所有傳送訊息。
  返回值:如果訊息可得到,返回非零值;如果沒有訊息可得到,返回值是零。
  備註:和函式GetMessage不一樣的是,函式PeekMesssge在返回前不等待訊息被放到佇列裡。
  PeekMesssge只得到那些與引數hWnd標識的視窗相聯絡的訊息或被lsChild確定為其子視窗相聯絡的訊息,並且該訊息要在由引數wMsgFiterMin和wMsgFiherMax確定的範圍內。如果hWnd為NULL,則PeekMessage接收屬於當前呼叫執行緒的視窗的訊息(PeekMessage不接收屬於其他執行緒的視窗的訊息)。如果hWnd為C1,PeekMessage只返回hWnd值為NULL的訊息,該訊息由函式PostThreadMessage寄送。如果wMsgFilterMin和wMsgFilterMax都為零,GetMessage返回所有可得的訊息(即,無範圍過濾)。
  常數WM_KEYFIRST和WMKEYLAST可作為過濾值取得所有鍵盤訊息;常數WM_MOUSEFIRST和WM_MOUSELAST可用來接收所有的滑鼠訊息。
  PeekMessage通常不從佇列裡清除WM_PAINT訊息。該訊息將保留在佇列裡直到處理完畢。但如果WM_PAINT訊息有一個空更新區,PeekMessage將從佇列裡清除WM_PAINT訊息。
  Windows CE:有一個NULL更新區的WM_PAINT訊息不從佇列裡清除。