日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows编程,消息函数中拦截消息的问题

發(fā)布時間:2025/3/18 windows 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows编程,消息函数中拦截消息的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

很多年沒有寫windows窗口程序了,今天自制基于vulkan的程序時遇到了一些問題,部分代碼如下:

LRESULT CALLBACK XWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg) {case WM_CLOSE://PostQuitMessage(0);shouldClose = true;break;case WM_PAINT://run(info);//return 0;break;default:break;}return (DefWindowProc(hWnd, uMsg, wParam, lParam)); }int main() {while (true) {//while1MSG msg;while (PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE)) { //while2TranslateMessage(&msg);DispatchMessage(&msg);}vulkan_render();}

上面代碼正常運行,當有消息時,windows處理消息,當沒有消息時執(zhí)行渲染函數(shù)vulkan_render()。

如果改一下代碼:將

case WM_PAINT:break;

改為:

case WM_PAINT:return 0;

渲染函數(shù) vulkan_render將永遠不會被執(zhí)行,循環(huán)陷入在while2中出不來了。

原因如下 :

WM_PAINT這個消息一般來說并不頻繁,只有當窗口需要重繪時WINDOWS才發(fā)送此消息,比如窗口大小改變,窗口最小化再恢復(fù)時,窗口移出屏幕外再移回來,注意窗口被其它窗口蓋住再重現(xiàn)時不會導(dǎo)致重繪。

如果我們將這個消息在處理函數(shù)中直接return,不給后面?DefWindowProc的處理機會,那么WINDOWS就不知道WM_PAINT被處理過了,于是下一幀仍會向程序發(fā)送WM_PAINT消息。這樣一直循環(huán)下去。

因此,消息處理函數(shù)不要隨便return,除非你很清楚自己在做什么

總結(jié)

以上是生活随笔為你收集整理的windows编程,消息函数中拦截消息的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。