MFC滚动条设置的小研究,解决R6010错误和无法显示图片全部等错误

原创 2015年11月19日 10:53:41

关于滚动条设置的研究

滚动条的设置看似简单其实还是很需要琢磨的,首先需要了解到滚动条的页尺寸nPage(为什么用SCROLLINFO结构来实现我的上篇博客已经说明白了)的含义,它就是指你的PIC空间的大小,这里假设空间大小为100*200,你应该设置垂直滚动条的nPage=200;

然后需要明白滚动范围,这点不要异想天开。当然说到范围脑子一闪而过的肯定是图片的大小,假设图片的大小为1000*2000,那垂直滚动条的滚动范围是否就是0~2000呢?错!

别忘记当滚动条位置nPos为0时,他显示了图片0~200的大小,所以显示到1800~2000的部分nPos只需设为1800,即滚动范围的最大值为图片尺寸-控件尺寸,需要注意的是图片尺寸很少是规规矩矩的整数,所以难免会有些小问题,所以这里最好设置滚动范围的最大值为图片尺寸-控件尺寸-1,否则会产生R6010的错误

 

 

但是请不要忘记我们设置了滚动条的大小为一倍的图片控件大小

所以上面的方法在SetScrollRange()SetScrollPos()GetScrollRange()GetScrollPos()是没问题但是用了SetScrollInfo()GetScrollInfo(就会出现问题,这就是因为这时候滚动条的大小为一倍的图片控件大小,所以滚动条在滚动范围的最大值=图片尺寸-控件尺寸-滚动条尺寸=,=图片尺寸-2*控件尺寸,所以为了能显示图片的全部必须将滚动范围设为图片尺寸,这样问题就解决了,但是对于拖动滚动条使这个样子,对于点击向下向上按键可不能这样,因为它主要是受nPos限制的,所以,nPos还是应该小于图片尺寸-控件尺寸

示意图


 
 

 

 

 

 


代码如下

初始化

ZeroMemory(&ver,sizeof(ver));//0填充的地址和大小

    ver.cbSize=sizeof(ver);

    ver.fMask=SIF_RANGE|SIF_POS|SIF_PAGE;

    ver.nMax=m_maxv-1;

    ver.nMin=0;

    ver.nPage=Sheight;

    ver.nPos=0;

    m_Scrv.SetScrollInfo(&ver);

   响应函数

SCROLLINFOver;

        caseSB_THUMBTRACK://拖动滑块

            ZeroMemory(&ver,sizeof(ver));

            ver.cbSize=sizeof(ver);

            ver.fMask=SIF_TRACKPOS;

            m_Scrh.GetScrollInfo(&ver);

            m_pointx=ver.nTrackPos;

            ZeroMemory(&ver,sizeof(ver));

            ver.cbSize=sizeof(ver);

            ver.fMask=SIF_POS;

            ver.nPos=m_pointx;

            m_Scrh.SetScrollInfo(&ver);

            PicShow();

 

        caseSB_LINEDOWN://单击滚动条向下的箭头

            ZeroMemory(&ver,sizeof(ver));

            ver.cbSize=sizeof(ver);

            m_Scrh.GetScrollInfo(&ver,SIF_POS);

            iNowPos=ver.nPos;

            iNowPos=iNowPos+10;

            if(iNowPos>m_maxh-Swidth)

                iNowPos=m_maxh-Swidth;

            m_Scrh.SetScrollPos(iNowPos);

            m_pointx=iNowPos;

            //  重新加载图片

            PicShow();

 

            break;

MFC显示图片过大,拖动滚动条时不正常处理方法

重载OnSroll方法,并加入如下代码 if (LOBYTE(nScrollCode) == SB_THUMBTRACK) {     SCROLLINFO info;     info.cb...
  • lggrief
  • lggrief
  • 2016年10月12日 15:01
  • 586

MFC使用滚动条显示大图片

本文提供两种方法来解决MFC中使用滚动条来显示大图片的问题

调用了opencv的C++程序调试运行没有问题,但一运行exe就报错debug error R6010

问题描述:最近做项目的时候,发现调用了opencv库的C++程序在VS2010上调试运行完全没有问题,但是一旦运行debug文件下的exe文件就显示debug error,具体报错如图: 虽...

关于R6010 -abort() has been called的错误分析及其解决方法

R6010 -abort() has been called错误分析及其解决方法

VC/MFC加滚动条显示大图片SetScrollRange()、SetScrollInfo()两种思路实现及其两者优劣比较

OnHScroll和OnVScroll只提供16位的位置数据。GetScrollInfo和SetScrollInfo提供32位的滚动条位置数据。因此,一个应用程序在处理GetScrollInfo或Se...

MFC用CButton实现带滚动条的图片显示控件,无须用CScrollBar辅助实现。

     我们知道MFC种的Picture控件基本上就是CStatic,而CStatic控件通过ShowScrollBar函数只可以使滚动条现实出来,但是不可以拖动,所以想只用CStatic控件实现大...

ati2dvag错误—笔记本启动滚动条结束后进入系统蓝屏

在网上下了一个原版的xp-sp3系统,于是把本本重新分区装系统,安装一切顺利,驱动打好后(最后打的显卡驱动,显卡为ati mobility radeon 7500)重新启动系统,xp滚动条结束后进入系...
  • yct0605
  • yct0605
  • 2011年08月25日 09:10
  • 957

基于MFC带滚动条的图片浏览UI

  • 2015年09月20日 14:32
  • 51.28MB
  • 下载

Web图片滚动条加载、延迟加载技术LazyLoad研究

一个叫LazyLoad的jQuery插件 官网: http://www.appelsiini.net/projects/lazyload 非压缩源码(1.8.5)2013-8-11 ...

Web图片滚动条加载、延迟加载技术LazyLoad研究

一个叫LazyLoad的jQuery插件 官网: http://www.appelsiini.net/projects/lazyload 非压缩源码(1.8.5)2013-8-11 20:20:...
  • sonikk
  • sonikk
  • 2013年08月11日 20:43
  • 7228
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC滚动条设置的小研究,解决R6010错误和无法显示图片全部等错误
举报原因:
原因补充:

(最多只允许输入30个字)