Windows GUI WM_PAINT消息一直发送的问题
来源:互联网 发布:黑贞手办淘宝 编辑:程序博客网 时间:2024/05/29 19:47
昨天折腾了一天,把Direct 11的初始化,给捣腾了一遍。本来一切看似正常,结果在用D3D设备描述表 清空背景(用的绿色),并用交换链把后台缓冲区和前台缓冲区对调以后,仍然显示的是,窗口类的背景颜色。于是,好好看了一下是不是,初始化或者绘制方面出了什么问题。自己比较了一下,发现并没有问题,和书上的程序比较了一下,模式也是基本一样的。但是书上并没出问题,无奈只能单步调试找原因了。
这是,程序的主循环,单步调试的时候,每次循环都进入if中,而不会进入else中。 这让我相当的想不明白,按理说,需要每层循环中,都要有消息处理才会一直进入if中,那这个消息究竟是什么那? 通常情况下,系统不可能一直发送消息的吧? 后来,看到msg的消息ID是 0x000f去查了一下。结果发现,竟然是WM_PAINT,也就是说,这个程序不断地发送WM_PAINT消息,然后再不断地处理。后来查了一下,BAIDU才发现,原来被自己薄弱的WIN32基础给坑了。
调试以后,发现了一个非常奇怪的地方。
while(msg.message != WM_QUIT){// If there are Window messages then process them.if(PeekMessage( &msg, 0, 0, 0, PM_REMOVE )){TranslateMessage( &msg );DispatchMessage( &msg );}// Otherwise, do animation/game stuff.else{if( KEYDOWN(VK_ESCAPE) ){SendMessage(g_hWnd,WM_CLOSE,0,0);break;}DrawScreen();}}
这是,程序的主循环,单步调试的时候,每次循环都进入if中,而不会进入else中。 这让我相当的想不明白,按理说,需要每层循环中,都要有消息处理才会一直进入if中,那这个消息究竟是什么那? 通常情况下,系统不可能一直发送消息的吧? 后来,看到msg的消息ID是 0x000f去查了一下。结果发现,竟然是WM_PAINT,也就是说,这个程序不断地发送WM_PAINT消息,然后再不断地处理。后来查了一下,BAIDU才发现,原来被自己薄弱的WIN32基础给坑了。
罪魁祸首,是WM_PAINT的处理代码:
case WM_PAINT: return;
本来是不需要用到WM_PAINT的,但是,不想让WndProc空着,于是塞了个WM_PAINT和WM_DESTORY消息的处理进去。为了图方便,WM_PAINT直接就写成了上面的形式,结果就把自己坑了。果然,写程序不能做这种表面功夫啊。
- Windows GUI WM_PAINT消息一直发送的问题
- 系统何时发送WM_PAINT消息
- 系统何时发送WM_PAINT消息?
- DoModal 的调用会发送 WM_INITDIALOG 消息 WM_ERASEBKG 先于WM_PAINT
- Windows编程入门-WM_PAINT消息
- [转]关于windows 的窗口消息和WM_PAINT
- WINDOWS WM_PAINT消息 的 覆盖性 和 先进性 小议
- MFC与SDK中的重画问题 。。WM_PAINT消息的处理
- 关于WM_PAINT消息中只重绘无效区的问题
- WM_PAINT消息的异常情况
- duilib CPaintManagerUI的WM_PAINT消息
- WM_PAINT 的问题
- windows程序设计(2):WM_PAINT消息详解
- windows——消息——WM_PAINT
- SDK编程中有效区域与无效区域的盲区WM_PAINT消息何时发送的。。。
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- 人脸识别必读的N篇文章
- 什么是实体-联系图(ER图)
- 使用SplashScreenManager控件制作窗口加载动画
- 超强的Linux中断分析
- ps - 按进程消耗内存多少排序
- Windows GUI WM_PAINT消息一直发送的问题
- merge into的用法
- 海量数据挖掘--程序篇(多线程)
- Linux性能测试瓶颈定位和性能调优-系统配置篇
- mongdb shard搭建遇到的问题总结
- C++ static、const和static const 以及它们的初始化
- “常回家看看”入法,用法律代替道德约束,你怎么看?
- squashfs
- DetachedCriteria 比较时间大小 以及创建别名