解决单文档滚动条程序中显示图像闪烁问题

简介: 1、class CPictureProcessView : public CScrollView如果原来是继承自CView,则把程序中所有的CView替换成CScrollView。

1、class CPictureProcessView : public CScrollView

如果原来是继承自CView,则把程序中所有的CView替换成CScrollView。

注意,一定要重载 virtual   void   OnInitialUpdate();   否则可能出错。

 

2、添加内存DC,内存位图成员。

 

CDC m_MemDC; //内存DC

CBitmap m_MemBitmap; //内存位图

 

 

3、在打开文件后,要完成内存DC,和位图的初始化,同时设置滚动条的范围。

其实,就是把图像画到内存DC中。。

 

if (bitmap != NULL) { //把 图像画到内存DC中 m_MemBitmap.DeleteObject(); CDC *pDC = this->GetDC(); m_MemBitmap.CreateCompatibleBitmap(pDC,bitmap->GetWidth(),bitmap->GetHeight()); m_MemDC.SelectObject(m_MemBitmap); Graphics graphics(m_MemDC.GetSafeHdc()); graphics.DrawImage(bitmap,0,0); this->ReleaseDC(pDC); // 设置滚动条范围 CSize sizeTotal(bitmap->GetWidth(),bitmap->GetHeight() ); SetScrollSizes(MM_TEXT,sizeTotal); } 

4、处理OnDraw函数。

其实就是从内存DC复制到另一个DC中。这里要注意的是,得到滚动条的位置,可以减少复制的范围。

我在测试十几M大小的图像完全不卡。

if (p_bitmap != NULL) { SCROLLINFO si ; GetScrollInfo ( SB_HORZ ,& si , SIF_ALL ); int hPos = si .nPos ; //水平滚动条 位置 GetScrollInfo ( SB_VERT ,& si , SIF_ALL ); int vPos = si . nPos ; //竖直滚动条位置 CRect tempRect ; this->GetWindowRect(&tempRect); pDC->BitBlt(hPos,vPos,tempRect.Width(),tempRect.Height(),&m_MemDC,hPos,vPos,SRCCOPY); } 

5、屏蔽WM_ERASEBKGND消息。

不屏蔽的话会闪烁。

BOOL CPictureProcessView::OnEraseBkgnd(CDC* pDC)

{

//return CScrollView::OnEraseBkgnd(pDC);

return TRUE;

}

 

 

相关文章
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
1661 0
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
|
15天前
闪烁的霓虹灯文字设计404页面源码
闪烁的霓虹灯文字设计404页面源码,文字闪烁,灯光变色,霓虹灯效果,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行
26 10
|
5月前
ThreeJs的场景实现鼠标拖动旋转控制
这篇文章介绍了如何在Three.js中实现通过鼠标拖动来旋转场景中的模型,并提供了实现这一功能的代码示例。
198 0
LabVIEW鼠标滚轮实现波形放大缩小(zoom)功能
实现功能:将鼠标放在波形图曲线上,滚轮可以实现波形放大缩小功能。 代码思想:注册鼠标滚轮事件,滚轮时改变波形图横纵坐标最大值和最小值。
184 0
|
Web App开发 JavaScript 前端开发
Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果
  Magnifier.js 是一个 JavaScript 库,能够帮助你在图像上实现放大镜效果,支持使用鼠标滚轮放大/缩小功能。放大的图像可以显示在镜头本身或它的外部容器中。Magnifier.js 使用Event.js 作为跨浏览器的事件处理器。
1691 0
C#(三十五)之在滚动窗口中绘图
窗体中的三个属性: Size:窗体大小(包括标题栏和边框) ClientSize:工作区大小(不包括标题栏和边框) AutoScrollMinSize:出现滚动条的最小尺寸
237 0
C#(三十五)之在滚动窗口中绘图
|
C#
好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字
原文:好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.
1065 0
|
机器学习/深度学习 存储 前端开发
WEBGL学习【十三】鼠标点击立方体改变颜色的原理与实现
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/79035437 // PickFace.
1208 0
|
前端开发 开发工具 数据库