關於windows訊息的派發

2021-07-06 02:00:30 字數 976 閱讀 7299

while(getmessage(&msg,null,0,0))//從訊息佇列中取訊息 

對於以上結構,寫過windows程式的都應該熟悉,其中dispatch函式負責**訊息,那麼如果就dispatch這句話注釋掉,是不是windows視窗就收不到訊息了,非也,經研究發現,對於一般的滑鼠鍵盤操作,注釋掉dispatch是可以遮蔽訊息的,但是有些訊息是作業系統是直接呼叫視窗過程的,所以他可以繞過訊息迴圈。

一下是經過測試可以繞過派發訊息直接呼叫視窗過程的訊息,但是可能還不止這些吧。

#define wm_activate                     0x0006

#define wm_setfocus                     0x0007

#define wm_killfocus                    0x0008

#define wm_erasebkgnd                   0x0014

#define wm_windowposchanging            0x0046

#define wm_windowposchanged             0x0047

#define wm_nchittest                    0x0084

#define wm_ncpaint                      0x0085

#define wm_ncactivate                   0x0086

#if(winver >= 0x0400)

#define wm_ime_setcontext               0x0281

#define wm_ime_notify                   0x0282

原來windows訊息分為佇列訊息,凡是佇列訊息都需要用訊息迴圈派發,佇列訊息使用postmessage,而sendmessage是直接傳送訊息給視窗過程處理的。

觸控訊息總體派發過程

和按鍵派發類似,當訊息獲取模組通過pipe將訊息傳遞到客戶端,inputqueue中的next 函式內部 調 用 nativepollonce 函式中會讀取該訊息。如果有訊息,則 回 調viewroot內部的mlnputhandler物件 的 dispatchmotion 函式,該函式僅僅是發起乙個...

關於Windows訊息的分類和使用場景

在windows開發中,我們經常會使用的自定義訊息,關於這個訊息的數值選取,還是有點講究的,今天就來具體看看 免得又掉溝裡了 windows訊息,可以分為如下幾類 這類訊息是被作業系統定義並使用的訊息。我們盡量不要在這個範圍內定義我們自己的訊息,因為它們會被作業系統使用並識別訊息的wparam和lp...

Windows的訊息佇列和訊息迴圈

一 windows中有乙個系統訊息佇列,對於每乙個正在執行的windows應用程式,系統為其建立乙個 訊息佇列 即應用程式佇列,用來存放該程式可能建立的各種視窗的訊息。應用程式中含有一段稱作 訊息迴圈 的 用來從訊息佇列中檢索這些訊息並把它們分發到相應的視窗函式中。二 windows為當前執行的每個...