mfc窗口拖动的拖尾形成原因,如何解决

songtzu 2013-08-13 10:54:18
mfc项目,窗口被其他窗口覆盖,例如QQ或者绘图板等,拖动这些其它窗口,mfc项目的界面Onpaint重绘会留下拖尾。这种问题该如何解决?
窗口框架:
主窗口MainDlg创建一个ChildDlg,ChildDlg嵌套覆盖在MainDlg上面。
其它应用的窗口在ChildDlg上面拖动,MainDlg和ChildDlg都会响应OnPaint。此时,拖尾为MainDlg窗口的颜色。有何好的解决办法么?
...全文
215 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
songtzu 2013-08-29
回复结论: 巧妙点解决第三方窗口覆盖重绘问题:设置窗口拖动是内容不可见。这种方式在xp系统下也不会频繁触发WM_PAINT
  • 打赏
  • 举报
回复
szyyjzy 2013-08-13
是不是所谓的一个像素的问题,InvalidateRect时少计算了一点
  • 打赏
  • 举报
回复
only_delusion 2013-08-13
引用 6 楼 songtzu 的回复:
[quote=引用 4 楼 lin98666lin 的回复:] 你的onpaint 效率太低了吧 onpain函数里 干的活越少越好,你可以试试。 还有 WM_ERASEBKGND消息,里面什么也别干,直接返回 再试试
我上午查找到原因,也是Onpaint调用太频繁导致,而且不应该处理WM_ERASEBKGND。就是代码太多了,不好改动,逻辑耦合。[/quote] 哦... 嗯,onpain调用多少次 倒是不是很重要,关键里面 别加载图片什么的,效率高了,调用次数多一点也无所谓,也不应该出现黑条。 WM_ERASEBKGND里面 不要绘制东西,直接返回,true false都可以,返回false 尅防止卡
  • 打赏
  • 举报
回复
songtzu 2013-08-13
引用 4 楼 lin98666lin 的回复:
你的onpaint 效率太低了吧 onpain函数里 干的活越少越好,你可以试试。 还有 WM_ERASEBKGND消息,里面什么也别干,直接返回 再试试
我上午查找到原因,也是Onpaint调用太频繁导致,而且不应该处理WM_ERASEBKGND。就是代码太多了,不好改动,逻辑耦合。
  • 打赏
  • 举报
回复
songtzu 2013-08-13
引用 3 楼 tiger9991 的回复:
你操作系统版本是不是有点低啊?? 现在移动都是虚框移动。不是每次都重绘的。只有每次都重绘才会出现你说的那种情况
我用win7开发,但是都用的win7的xp sp2,windows经典风格测试。 win7是有应用的窗口缓存,所以移动窗口不会调用OnPaint,但是xp下面每次都会准点调用,所以这个问题只出现在xp下面。测试要求xp必须ok。我已经找到问题了,是程序框架问题,但是代码框架是好几个人写的,写得不好,我改着很为难。
  • 打赏
  • 举报
回复
only_delusion 2013-08-13
你的onpaint 效率太低了吧 onpain函数里 干的活越少越好,你可以试试。 还有 WM_ERASEBKGND消息,里面什么也别干,直接返回 再试试
  • 打赏
  • 举报
回复
傻X 2013-08-13
你操作系统版本是不是有点低啊?? 现在移动都是虚框移动。不是每次都重绘的。只有每次都重绘才会出现你说的那种情况
  • 打赏
  • 举报
回复
songtzu 2013-08-13
引用 1 楼 szyyjzy 的回复:
是不是所谓的一个像素的问题,InvalidateRect时少计算了一点
应该不是,窗口遮盖并不是我触发的,是操作系统发送的消息。我并无任何InvalidRect相关的代码。
  • 打赏
  • 举报
回复
发帖
界面

1.5w+

社区成员

VC/MFC 界面
社区管理员
  • 界面
加入社区
帖子事件
创建了帖子
2013-08-13 10:54
社区公告
暂无公告