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;

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

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

MFC中滚动条的使用 CScrollBar

新建一个mfc基于对话框的工程 1、创建
  • mj511099781
  • mj511099781
  • 2014年06月19日 16:10
  • 5374

MFC中ScrollBar滚动条控件的使用

在MFC需要有时需要用到混动条拖动屏幕和显示。现将滚动条控件ScrollBar的相关用法总结如下。 一、使用的步骤 1、在对话框中拖入CScrollBar控件,并修改ID, 2、在对话框的Ini...
  • u012273127
  • u012273127
  • 2017年03月14日 14:59
  • 1865

mfc 垂直滚动条添加,并响应鼠标滑轮消息

添加垂直滚动条,需要如下函数: void CKTLXSetCard::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { /...
  • Leighton_52
  • Leighton_52
  • 2013年12月05日 11:18
  • 3039

MFC学习日记之滚动条控件

常见的滚动条有水平滚动条和竖直滚动条
  • my_lord_
  • my_lord_
  • 2016年08月29日 12:47
  • 1283

MFC中CScrollView对话框位置及滚动条调整

MFC中CScrollView对话框位置及滚动条调整
  • daoming1112
  • daoming1112
  • 2017年08月22日 09:49
  • 304

MFC 滚动条

今天折腾了一天就学了个滚动条,没有想到挺麻烦的........虽然老师说以后用控件,现在做真够费劲的!     为窗口添加滚动条    为窗口添加滚动条非常的简单,只需在创建窗口时指定窗口的样式中加上...
  • xxliuzhifeng
  • xxliuzhifeng
  • 2009年10月14日 18:11
  • 7861

MFC滚动条

Windows用两种不同的方式来处理滚动条。一些控制,如编辑控制和列表控制,可以带有滚动条。在这种情况下,滚动条会被自动处理,不不要额外的代码来处理。 滚动条也可以作为单独的元件来使用。当这样使用时...
  • zmr1991
  • zmr1991
  • 2014年12月01日 15:41
  • 550

MFC对话框处理滚动条

MFC对话框处理滚动条flyfish头文件//成员变量 //在资源视图中看到的对话框的大小 CRect m_rectOriginal; // 鼠标拖拽 BOOL...
  • flyfish1986
  • flyfish1986
  • 2017年05月23日 14:51
  • 997

MFC-给窗口添加滚动条

创建滚动条
  • godqiao
  • godqiao
  • 2017年11月16日 21:11
  • 319
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC滚动条设置的小研究,解决R6010错误和无法显示图片全部等错误
举报原因:
原因补充:

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