一个绘图的问题,高手请进!

broccoli 2003-10-17 02:58:58
我在OnDraw里面加了这样一段代码:
for(int i=0;i<200;i=i+3)
{
pDC->Rectangle (&CRect(50+i,50+i,100+i,100+i));
}
然后在CMyView::OnMouseMove里面加了一句Invalidate();
但是这样在鼠标移动的时候会屏幕导致闪烁,我就
把OnDraw里面的代码改成了这样 :
CDC dc;
CDC* pDrawDC = pDC;
CBitmap bitmap;
CBitmap* pOldBitmap = 0;
CRect rect;
pDC->GetClipBox(client);
dc.CreateCompatibleDC(pDC);
bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
pOldBitmap = dc.SelectObject(&bitmap);
for(int i=0;i<200;i=i+3)
{
pDC->Rectangle (&CRect(50+i,50+i,100+i,100+i));
}
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
&dc, 0, 0, SRCCOPY);
可是为什么这样还是会导致闪烁呢,后来我把
CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
return CView::PreCreateWindow(cs);
}
改成了这样:
CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
if (cs.lpszClass == NULL)
cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS);
return TRUE;
}
这样改了之后闪烁就消失了,可又这是为什么呢。
...全文
28 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
EricHxy 2003-10-17
  • 打赏
  • 举报
回复
你首先应该明白闪烁的原因是你老是调用
Invalidate();//而不是其他的
这会导致整个视图重画。

你应该计算需要重画的区域,调用InvalidateRect等函数,精确需要重画的区域。

你可以看看《深入浅出MFC》,里面好像有一节将如何提高重绘的效率,减少闪烁。
broccoli 2003-10-17
  • 打赏
  • 举报
回复
不好意思,我还是不大明白,能不能说清楚一点啊
shao 2003-10-17
  • 打赏
  • 举报
回复
每次鼠标移动都会重新调用PreCreateWindow去重画窗口,当然会闪烁了,
而下面重载了PreCreateWindow,使它几乎没有什么动作,当然不会出现什么闪烁了
creative 2003-10-17
  • 打赏
  • 举报
回复
通过重载PreCreateWindow,你禁止了背景上画刷的使用。要验证这一点,可以不重载PreCreateWindow函数,而是加入消息处理函数CWnd::OnEraseBkgnd,其中不做任何事情,仅仅返回一个非零值。
highz 2003-10-17
  • 打赏
  • 举报
回复
Invalidate(FALSE);
flyelf 2003-10-17
  • 打赏
  • 举报
回复
gz
broccoli 2003-10-17
  • 打赏
  • 举报
回复
哦,不好意思,上面那个地方本来是dc.Rectangle (&CRect(50+i,50+i,100+i,100+i));是我打错了
highz 2003-10-17
  • 打赏
  • 举报
回复
pDC->Rectangle (&CRect(50+i,50+i,100+i,100+i));
-->
dc.Rectangle (&CRect(50+i,50+i,100+i,100+i));

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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