急急!!抖动问题?

wcqgm 2006-04-27 11:29:27
我在对话框里绘制的图形,移动时重新调用OnPaint()重画,再用Invalidate(false)刷新,屏幕会抖动,请问高手应该怎么解决啊?
...全文
615 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
big_jin2000 2006-04-30
  • 打赏
  • 举报
回复
重载OnEraseBkgnd,直接返回1,不让MFC框架代码刷背景!
ztony007 2006-04-30
  • 打赏
  • 举报
回复
好好学习,天天向上
qiujun1 2006-04-30
  • 打赏
  • 举报
回复
学习学习
lid0770 2006-04-30
  • 打赏
  • 举报
回复
UP
真糨糊 2006-04-29
  • 打赏
  • 举报
回复
?
wcqgm 2006-04-28
  • 打赏
  • 举报
回复
好的。谢谢!给你加分啊!
真糨糊 2006-04-28
  • 打赏
  • 举报
回复
我同时帮你改了一下其他问题,你先看看代码
真糨糊 2006-04-28
  • 打赏
  • 举报
回复
我已把改好的代码发给你了,抖的问题是这段代码引起的:
void CMyDlg::OnPaint()

CPaintDC dc(this);
m_ClienDraw.left=60;
m_ClienDraw.top=0;
m_ClienDraw.right=1000;
m_ClienDraw.bottom=500;
dc.Rectangle(m_ClienDraw.left,
m_ClienDraw.top,
m_ClienDraw.right,
m_ClienDraw.bottom);
真糨糊 2006-04-28
  • 打赏
  • 举报
回复
TO:wcqgm(傲翔白鸽)
你应该把整个工程(不包括Debug和Release两个目录)打包发给我,光是个dsw文件是没有用的。
wcqgm 2006-04-28
  • 打赏
  • 举报
回复
好的。我的程序实现的是画图功能。是初学者有不足地方请指教啊!谢谢!
真糨糊 2006-04-28
  • 打赏
  • 举报
回复
放不方便把你的工程发给我,我帮你查查
njg_jh@163.com
wcqgm 2006-04-28
  • 打赏
  • 举报
回复
还是不行啊!
真糨糊 2006-04-28
  • 打赏
  • 举报
回复
因为只是鼠标移动,没有按鼠标左键左键,所以要放在else里。
先选择一个图形,然后选择缩放,这时当把鼠标移到四个拐角的小方框是,鼠标就变成相应的形状了
我已发邮件给你了
wcqgm 2006-04-28
  • 打赏
  • 举报
回复
我试了。可是不行啊!是直接加上吗?为什么要在ELSE里写呢,不能在EXP直接写吗?
真糨糊 2006-04-28
  • 打赏
  • 举报
回复
TO:wcqgm(傲翔白鸽)
我已发邮件给你
wcqgm 2006-04-28
  • 打赏
  • 举报
回复
我选中图形进行缩放时,原来是放在右下角来改变图形大小的。现在判断鼠标放在四个拐角任意处改变大小,怎么不行啊?原因在哪?
真糨糊 2006-04-27
  • 打赏
  • 举报
回复
增加成员变量
XX* pNode;
初始化为NULL

我认为最好在LBUTTONDOWN里执行这些代码
POSITION pos;
pos=m_list.GetHeadPosition();
while (pos)
{
pNode = &m_list.GetAt(pos);
if(pNode->m_Index==m_nIndex)
{
break;//跳出循环,因为已经找到没必要再循环下去找
}
m_list.GetNext(pos);
}

在移动图形时
InvalidateRect(pNode->m_rect,false);
pNode->m_ptOld=m_Move.m_ptOld+point-m_Old;
pNode->m_ptCur=m_Move.m_ptCur+point-m_Old;
pNode->m_rect.left=m_Move.m_rect.left+point.x-m_Old.x;
pNode->m_rect.top=m_Move.m_rect.top+point.y-m_Old.y;
pNode->m_rect.right=m_Move.m_rect.right+point.x-m_Old.x;
pNode->m_rect.bottom=m_Move.m_rect.bottom+point.y-m_Old.y;
InvalidateRect(pNode->m_rect,false);
wcqgm 2006-04-27
  • 打赏
  • 举报
回复
我贴丢了啊!
wcqgm 2006-04-27
  • 打赏
  • 举报
回复
有的啊!代码有的啊!
真糨糊 2006-04-27
  • 打赏
  • 举报
回复
改成这样
POSITION pos;
pos=m_list.GetHeadPosition();
while (pos)
{
node1=m_list.GetAt(pos);
node2=node1;
if(node1.m_Index==m_nIndex)
{
node1.m_ptOld=m_Move.m_ptOld+point-m_Old;
node1.m_ptCur=m_Move.m_ptCur+point-m_Old;
node1.m_rect.left=m_Move.m_rect.left+point.x-m_Old.x;
node1.m_rect.top=m_Move.m_rect.top+point.y-m_Old.y;
node1.m_rect.right=m_Move.m_rect.right+point.x-m_Old.x;
node1.m_rect.bottom=m_Move.m_rect.bottom+point.y-m_Old.y;

InvalidateRect(node2.m_rect,false);
InvalidateRect(node1.m_rect,false);
break;//跳出循环,因为已经找到没必要再循环下去找
}
m_list.GetNext(pos);
}
加载更多回复(21)

19,468

社区成员

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

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