WM_MOUSEMOVE、WM_PAINT和WM_TIMER這些訊息不是在事件發生的時候進入佇列,而是直接設定一個位,在訊息迴圈GetMessage/PeekMessage的時候,如果當前沒有符合條件的訊息,才會去查那個位有沒有設,有就產生一個。
當然滑鼠移動的時候系統還要做別的事情,比如跨越視窗邊界的時候要去發WM_SETCURSOR看看應用程式是不是改了游標,根據游標位置來決定是設WM_MOUSEMOVE還是WM_NCMOUSEMOVE標誌等等。還要呼叫你自己在GetMessage之後寫的繪圖等訊息處理程式碼。不管怎麼說,如果你一直在移動滑鼠,那麼兩個WM_MOUSEMOVE之間的時間間隔,是取決於你GetMessage/PeekMessage的頻率,這個並不隨滑鼠移動速度而增加。
參考About Messages and Message Queues
WM_MOUSEMOVE、WM_PAINT和WM_TIMER這些訊息不是在事件發生的時候進入佇列,而是直接設定一個位,在訊息迴圈GetMessage/PeekMessage的時候,如果當前沒有符合條件的訊息,才會去查那個位有沒有設,有就產生一個。
當然滑鼠移動的時候系統還要做別的事情,比如跨越視窗邊界的時候要去發WM_SETCURSOR看看應用程式是不是改了游標,根據游標位置來決定是設WM_MOUSEMOVE還是WM_NCMOUSEMOVE標誌等等。還要呼叫你自己在GetMessage之後寫的繪圖等訊息處理程式碼。不管怎麼說,如果你一直在移動滑鼠,那麼兩個WM_MOUSEMOVE之間的時間間隔,是取決於你GetMessage/PeekMessage的頻率,這個並不隨滑鼠移動速度而增加。
參考About Messages and Message Queues