windows编程,消息函数中拦截消息的问题
很多年没有写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) {//while1
        MSG msg;
        while (PeekMessage(&msg, hWnd, , , PM_REMOVE)) { //while2
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
     vulkan_render();
    }
上面代码正常运行,当有消息时,windows处理消息,当没有消息时执行渲染函数vulkan_render()。
如果改一下代码:将
case WM_PAINT:
break;
改为:
case WM_PAINT:
return ;
渲染函数 vulkan_render将永远不会被执行,循环陷入在while2中出不来了。
原因如下 :
WM_PAINT这个消息一般来说并不频繁,只有当窗口需要重绘时WINDOWS才发送此消息,比如窗口大小改变,窗口最小化再恢复时,窗口移出屏幕外再移回来,注意窗口被其它窗口盖住再重现时不会导致重绘。
如果我们将这个消息在处理函数中直接return,不给后面 DefWindowProc的处理机会,那么WINDOWS就不知道WM_PAINT被处理过了,于是下一帧仍会向程序发送WM_PAINT消息。这样一直循环下去。
因此,消息处理函数不要随便return,除非你很清楚自己在做什么
windows编程,消息函数中拦截消息的问题的更多相关文章
- windows 编程—— 使用函数笔记
		目录: 创建滚动条 滚动条函数(新老版本) 取得设备内容句柄hdc 设置 hdc 中的属性 画点画线 画填充图形 使用自定义的 画笔 和 画刷 矩形.区域和剪裁 关于GDI映像模式 其他常用的方便计算 ... 
- 06 Windows编程——设备句柄 和 WM_PAINT消息
		windows程序在现实方式上属于图形方式,和文字方式的显示,有显著的不同. 什么是设备句柄,如何获取 使用统一的数据结构表示某一设备,这个结构就是设备句柄. 源码 #include<Windo ... 
- windows 编程—— 常用函数 与 操作
		目录: MessageBox() 和 PlaySound() 获得窗口 或屏幕大小 获得字体大小 输出文字 屏蔽和显示控制台窗口 1. MessageBox() 和 PlaySound() Messa ... 
- Windows编程MessageBox函数
		API: int MessageBox(HWND hWnd, LPCTSTRlpText, LPCTSTRlpCaption, UINTuType); MSDN描述: This function cr ... 
- 【转】深入Windows内核——C++中的消息机制
		上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图 Win32 ... 
- Windows中的消息与消息队列
		消息 在Windows中,消自由MSG结构体表示 typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lPar ... 
- 深度解析VC中的消息
		消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情 ... 
- 深度解析VC中的消息(转发)
		http://blog.csdn.net/chenlycly/article/details/7586067 这篇转发的文章总结的比较好,但是没有告诉我为什么ON_MESSAGE的返回值必须是LRES ... 
- Windows编程  Windows程序的生与死(中)
		<pre style=""><pre class="cpp" name="code">1 #include < ... 
随机推荐
- Java数据结构之算法时间度
			1.度量一个程序(算法)执行时间的两种方法 1)事后统计的方法 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序:二是所得时间的统计量依赖于计算机的硬件.软件 ... 
- 动态规划: HDU1003Max Sum
			Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ... 
- SharePoint自己定义程序页面部署 不用重新启动IIS
			版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/dz45693/article/details/30840255 SharePoint的部署方式默认是 ... 
- css隐藏滚动条 兼容谷歌、火狐、IE等各个浏览器
			项目中,页面效果需要展示一个页面的移动端效果,使用的是一个苹果手机样式背景图,咋也没用过苹果,咋也不敢形容. 如下图所示: 在谷歌浏览器如图一滚动条顺利隐藏,但是火狐就如图二了,有了滚动条丑的一批. ... 
- Linux 解决E: Sub-process /usr/bin/dpkg returned an error code (1)错误
			在用apt-get安装软件时出现了类似于 install-info: No dir file specified; try --help for more information.dpkg: 处理 g ... 
- Python小技巧:使用*解包和itertools.product()求笛卡尔积(转)
			leetcode上做提示时候看到有高人用这个方法解题 [问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = [' ... 
- CCPC-Wannafly Winter Camp Day1 (Div2, onsite) 夺宝奇兵
			题目描述 wlswls所在的王国有nn个居民(不包括wlswls),他们共有mm件神奇的宝物. 对于第ii件宝物,wlswls可以花费a_iai的金币把它从原来的主人那里买过来. 请问wlswls最 ... 
- Laplace's equation
			链接:https://en.wikipedia.org/wiki/Laplace%27s_equation 
- so 调用
			dlsym dlopen dlclose 
- [每日一学]apache camel|XSLT|SAXON
			最近工作中,用到xslt文件来描述和配置xml文件的转换规则和业务逻辑,开始用jdk自带的TransformerFactory, 有严重的性能问题 后来用Saxon 的com.saxonica.con ... 
