windows编程,消息函数中拦截消息的问题
2021-02-08 23:19
标签:屏幕 一般来说 def efault 执行 turn ase info hwnd 很多年没有写windows窗口程序了,今天自制基于vulkan的程序时遇到了一些问题,部分代码如下: 上面代码正常运行,当有消息时,windows处理消息,当没有消息时执行渲染函数vulkan_render()。 如果改一下代码:将 改为: 渲染函数 vulkan_render将永远不会被执行,循环陷入在while2中出不来了。 原因如下 : WM_PAINT这个消息一般来说并不频繁,只有当窗口需要重绘时WINDOWS才发送此消息,比如窗口大小改变,窗口最小化再恢复时,窗口移出屏幕外再移回来,注意窗口被其它窗口盖住再重现时不会导致重绘。 如果我们将这个消息在处理函数中直接return,不给后面 DefWindowProc的处理机会,那么WINDOWS就不知道WM_PAINT被处理过了,于是下一帧仍会向程序发送WM_PAINT消息。这样一直循环下去。 因此,消息处理函数不要随便return,除非你很清楚自己在做什么 windows编程,消息函数中拦截消息的问题 标签:屏幕 一般来说 def efault 执行 turn ase info hwnd 原文地址:https://www.cnblogs.com/timeObjserver/p/11334431.htmlLRESULT 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) {//while1
MSG msg;
while (PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE)) { //while2
TranslateMessage(&msg);
DispatchMessage(&msg);
}
vulkan_render();
}
case WM_PAINT:
break;
case WM_PAINT:
return 0;
文章标题:windows编程,消息函数中拦截消息的问题
文章链接:http://soscw.com/index.php/essay/52860.html