windows程式設計,訊息函式中攔截訊息的問題

2021-09-26 02:40:33 字數 815 閱讀 3099

很多年沒有寫windows視窗程式了,今天自製基於vulkan的程式時遇到了一些問題,部分**如下:

lresult callback xwindow::wndproc(hwnd hwnd, uint umsg, wparam wparam, lparam lparam) 

return

(defwindowproc(hwnd, umsg, wparam, lparam));

}int

main()

vulkan_render();

}

上面**正常執行,當有訊息時,windows處理訊息,當沒有訊息時執行渲染函式vulkan_render()。

如果改一下**:將

case

wm_paint:

break;

改為:

case

wm_paint:

return

0;

渲染函式 vulkan_render將永遠不會被執行,迴圈陷入在while2**不來了。

原因如下 :

wm_paint這個訊息一般來說並不頻繁,只有當視窗需要重繪時windows才傳送此訊息,比如視窗大小改變,視窗最小化再恢復時,視窗移出螢幕外再移回來,注意視窗被其它視窗蓋住再重現時不會導致重繪。

如果我們將這個訊息在處理函式中直接return,不給後面 defwindowproc的處理機會,那麼windows就不知道wm_paint被處理過了,於是下一幀仍會向程式傳送wm_paint訊息。這樣一直迴圈下去。

因此,訊息處理函式不要隨便return,除非你很清楚自己在做什麼

Windows程式設計 視窗和訊息

include lresult callback wndproc hwnd,uint,wparam,lparam int winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icmdshow te...

10 Windows程式設計 滑鼠訊息

和滑鼠相關的三個屬於 click,double click,drag 滑鼠訊息和鍵盤訊息不同 只要滑鼠跨越某個視窗,或者在某個視窗中按鍵,訊息。客戶去滑鼠訊息 wm mousemove wm l,m,r buttondown wm l,m,r buttonup wm l,m,r buttondblc...

Qt中捕獲Windows訊息

最初打算發展wxwidgets,一樣是跨平台,速度還可以。之前一直對qt的license抱有偏見,感覺不夠linux精神,一直沒瞧得上它。甚至因此kde在我桌面上出現的機率遠遠小於gnome。後來,在跨平台 ide 介面設計工具等多方面因素考慮下,我選擇了曾被我忽略了n年的qt 我最先接觸的ui是g...