MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 多年VC的困惑,该如何处理

多年VC的困惑,该如何处理(2)

www.MyException.Cn  网友分享于:2013-04-27  浏览:61次

------解决方案--------------------
//CPaintDC dc(this); // 少这个后树状控件没有了???????

而这种现象,根据我的实际经验,的确会出现这种情况,我以前做CListCtrl界面美化的时候也发现过这个问题,用GetDC获取的DC绘制的时候会绘制到CHeaderCtrl上面了,所以你非要问原因是怎么回事,也不好解释,Windows内部的东西,我没有去纠结它,只知道CPaintDC 就解决了。
------解决方案--------------------
而这种现象,根据我的实际经验,的确会出现这种情况,我以前做CListCtrl界面美化的时候也发现过这个问题,用GetDC获取的DC绘制的时候会绘制到CHeaderCtrl上面了,所以你非要问原因是怎么回事,也不好解释,Windows内部的东西,我没有去纠结它,只知道CPaintDC 就解决了。
------解决方案--------------------
探讨

引用:

你这样 处理onpaint 界面会闪的吧?
CPaintDC 的构造方法中会调用 BeginPaint ,析构中会调用EndPaint。
这个两个api很重要,BeginPaint 会把当前的无效区设置为有效。

如果当前没有 无效区 ,系统就不会再发送 wm_paint 消息了

哥,真的好闪。。。
用了双缓冲,OnEraseBkgnd函数re……

------解决方案--------------------
探讨
引用:

引用:

你这样 处理onpaint 界面会闪的吧?
CPaintDC 的构造方法中会调用 BeginPaint ,析构中会调用EndPaint。
这个两个api很重要,BeginPaint 会把当前的无效区设置为有效。

如果当前没有 无效区 ,系统就不会再发送 wm_paint 消息了

哥,真的好闪。。。
用了双缓冲,OnE……

------解决方案--------------------
探讨
而这种现象,根据我的实际经验,的确会出现这种情况,我以前做CListCtrl界面美化的时候也发现过这个问题,用GetDC获取的DC绘制的时候会绘制到CHeaderCtrl上面了,所以你非要问原因是怎么回事,也不好解释,Windows内部的东西,我没有去纠结它,只知道CPaintDC 就解决了。

------解决方案--------------------
学习学习,高手继续,潜了。。。。
------解决方案--------------------
很简单,先调用一下父类的onpaint,再添加自己的处理就行了,没有这个,客户区会一直处于无效状态,会不停的刷新,所有没有东西显示,而且CPU老高
------解决方案--------------------
楼主的问题很好,楼主不是标题党。
我对于GDI有过长期的研究和使用,向你推荐《Windows图形编程》这本书。

1)凡是对于背景的操作,比如画图,贴图等。是响应OnPaint()还是OnEraseBkgnd??????我知道都可以,但是谁能说说区别和各自优缺点?

答:都可以。这个是个人习惯问题。我一般不使用OnEraseBkgnd,直接在OnPaint里完成所有事情,包括刷背景。这样做的好处是,如果你使用后备缓冲,那么会完全消除闪烁,而如果在OnEraseBkgnd刷背景,即使使用后备缓冲,也不会消除闪烁。因为许多区域亮度在短时间内变化了2次。请在百度搜索我关于闪烁原理和解决办法的文章。

2)上述OnPaint函数中,都是获得dc,都可以画背景,但是
//CPaintDC dc(this); // 少这个后树状控件没有了????????
 HDC hdc=::GetDC(m_hWnd);//CPaintDC dc(this)区别和联系????????
对这个的解释是,BeginPaint函数会获得一个设备环境,该设备环境有一个关联的裁剪区域【会裁剪掉子窗口,如果指定了WS_CLIPCHILDREN风格】,并且限制在无效区域【使用InvalidateRect等函数指定】内。而GetDC获得的设备环境的裁剪区域是整个个窗口的客户区,即没有裁剪掉任何部分,你刷背景如果使用这个设备环境,那么会把子窗口的区域也刷了。

建议楼主还是看看那本书,避免盲目。
------解决方案--------------------
我的两篇关于闪烁的博客:

MDI子窗口最大化后,切换子窗口会闪烁
http://hi.baidu.com/chendeping/blog/item/545798f231dd121bb07ec58d.html

MFC的CFormView在改变大小时子窗口区域闪烁的解决办法
http://hi.baidu.com/chendeping/blog/item/a7f86bfa02aa589d59ee90d2.html
------解决方案--------------------
闪烁用双缓冲就可以了。
------解决方案--------------------
这个需要一些设置的
------解决方案--------------------
额,这个问题太高深了。。。。努力学习。。。
------解决方案--------------------
多年VC的困惑 ? 不是就学习了大半年吗?

楼主语误?
------解决方案--------------------
我也因为这个问题烦恼过~
------解决方案--------------------
CPaintDC 、CWindowDC、 CClientDC、 CDC

关系图:

一句话概括:

CPaintDC 无效区dc, 相当于BeginPaint, EndPaint
CClientDC 客户区dc, 相当于GetDC, ReleaseDC
CWindowDC 整窗口dc, 相当于GetWindowDC, ReleaseDC
CDC 任何dc, 相当于CreateDC, DeleteDC

文章评论

不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
 程序员的样子
程序员的样子
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
鲜为人知的编程真相
鲜为人知的编程真相
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
总结2014中国互联网十大段子
总结2014中国互联网十大段子
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员都该阅读的书
程序员都该阅读的书
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员应该关注的一些事儿
程序员应该关注的一些事儿
一个程序员的时间管理
一个程序员的时间管理
中美印日四国程序员比较
中美印日四国程序员比较
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
旅行,写作,编程
旅行,写作,编程
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
我是如何打败拖延症的
我是如何打败拖延症的
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
老程序员的下场
老程序员的下场
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
如何成为一名黑客
如何成为一名黑客
我的丈夫是个程序员
我的丈夫是个程序员
每天工作4小时的程序员
每天工作4小时的程序员
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
编程语言是女人
编程语言是女人
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
漫画:程序员的工作
漫画:程序员的工作
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
Java程序员必看电影
Java程序员必看电影
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员必看的十大电影
程序员必看的十大电影
程序员和编码员之间的区别
程序员和编码员之间的区别
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有