OnPaint()的问题,在线等

JYSML 2013-08-11 09:19:46
由于特殊需要,每次重画是重画整个窗口,在OnPaint()中加入以下代码
CPaintDC dc(this);
CRect rcClient;
GetClientRect(&rcClient);
CRgn rgn1,rgn2;
rgn1.CreateRectRgnIndirect(&rcClient);
rgn2.CreateRectRgnIndirect(&dc.m_ps.rcPaint);
if(!rgn1.EqualRgn(&rgn2))
{
Invalidate();
}
rgn1.DeleteObject();
rgn2.DeleteObject();
程序好像进入死循环,cpu占有率30%,代码有不对的地方请指出,或有更好的方法请指点。在线等
...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
JYSML 2013-08-11
  • 打赏
  • 举报
回复
已解决,把代码放在开头就行了。 放在后面,rcPaint总是零。
szyyjzy 2013-08-11
  • 打赏
  • 举报
回复
抱歉,没有仔细看你的题目 OnPaint是重绘整个窗口,GetClientRect(),仅仅是客户区,这样Invalidate()后,两者的大小就会不同,我没有验证希望不要给你误导
JYSML 2013-08-11
  • 打赏
  • 举报
回复
引用 1 楼 szyyjzy 的回复:
OnPaint和OnDraw里面使用Invalidate()确实导致死循环 Invalidate()是重画整个屏幕,调用OnPaint->OnDraw
有一个判断,如何重画区域是整个屏幕,就不调用Invalidate(),为什么还会循环?
szyyjzy 2013-08-11
  • 打赏
  • 举报
回复
OnPaint和OnDraw里面使用Invalidate()确实导致死循环 Invalidate()是重画整个屏幕,调用OnPaint->OnDraw

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧