MFC在内存中绘图拖动时屏幕下方显示的画面出现重叠

NAME15122 2012-11-07 07:05:17
CRect rect;
this->GetClientRect(&rect);
// 指针
pDC = this->GetDC();//屏幕绘图上下文设备的指针
this->Invalidate(0);//是否擦除背景
pDC->SetWindowOrg(m_nHScrollPos, m_nVScrollPos);//水平、垂直滚动条的位置
//内存绘图
CBitmap memBitmap;//定义一个位图对象
CBitmap* pOldBmp = NULL;
memDC.CreateCompatibleDC(pDC);//内存绘图设备建立与屏幕显示设备兼容的内存显示设备
memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);//建立与建立与屏幕显示兼容的位图
pOldBmp = memDC.SelectObject(&memBitmap);//将位图对象选入内存显示设备只有选入了位图的内存显示设备才有地方绘图,画到指定的位图

memDC.BitBlt(rect.left,rect.top,rect.right,rect.bottom,pDC,0,0,SRCCOPY);

DrawWave(&memDC);//绘图函数

pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY);//将内存中的图拷贝到屏幕上进行显示

memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
memBitmap.DeleteObject();
这是我在OnPaint()中实现的拷贝图形函数,图形可正常显示,为了解决拖动滚动条时图形闪烁我让OnEraseBKgnd()函数直接返回TRUE 这样做以后拖动不闪烁了,但是拖动时屏幕下面显示的图形重叠,不知该如何解决
...全文
292 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwhhb4002 2012-11-08
  • 打赏
  • 举报
回复
好东西学习一下
LocoBrian 2012-11-08
  • 打赏
  • 举报
回复
刷新位置没计算对吧
看不见的裂痕 2012-11-08
  • 打赏
  • 举报
回复
pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY); 这两个参数要根据滚动轴的位置来重新定义的。 毕竟View只能显示固定的大小。
NAME15122 2012-11-08
  • 打赏
  • 举报
回复
pDC->SetWindowOrg(m_nHScrollPos, m_nVScrollPos);//水平、垂直滚动条的位置 这一句注释掉就好了,但是原因不知道为什么
NAME15122 2012-11-08
  • 打赏
  • 举报
回复
引用 1 楼 tiger9991 的回复:
pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY); 这两个参数要根据滚动轴的位置来重新定义的。 毕竟View只能显示固定的大小。
我也觉得这个参数得改一下,但是不知道怎么改,能不能给点建议

15,980

社区成员

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

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