放大缩小看似简单,实际上还是比较复杂的。所以专门拿出来说明。

缩放这块,主要就是处理m_pDoc->m_scalefactor
void CGreenOpenPaintView::OnButtonZoomin()
{
    m_pDoc->ScaleFactorZoomIn();
    OnUpdate(NULL, 0, NULL);
    UpdateRulersInfo(RW_RESIZE, NULL);
}
void CGreenOpenPaintView::OnUpdateButtonZoomin(CCmdUI *pCmdUI)
{
    pCmdUI->Enable((m_pDoc->m_fScaleFactor < ZOOM_MAX)?TRUE:FALSE);    
}
void CGreenOpenPaintView::OnButtonZoomout()
{
    m_pDoc->ScaleFactorZoomOut();
    OnUpdate(NULL, 0, NULL);
    UpdateRulersInfo(RW_RESIZE, NULL);
}
void CGreenOpenPaintView::OnUpdateButtonZoomout(CCmdUI *pCmdUI)
{
    pCmdUI->Enable((m_pDoc->m_fScaleFactor > ZOOM_MIN)?TRUE:FALSE);
}
void CGreenOpenPaintView::OnButtonViewAll()
{
    //获得和比例最接近的值.只比较宽度
    CRect clientRect;
    GetClientRect(clientRect);
    float fzoom = 0;
    //如果是小图片,直接全部显示
    if (m_pDoc->m_image.Width() < clientRect.Width())
    {
        m_pDoc->m_fScaleFactor = ZOOM_NORMAL;
    }else{
        fzoom = clientRect.Width()/ m_pDoc->m_image.Width()  ;
        if (fzoom<=ZOOM_MIN)
        {
            m_pDoc->m_fScaleFactor = ZOOM_MIN;
        }
        else if (fzoom  <= ZOOM_MIN*2)
        {
            m_pDoc->m_fScaleFactor = ZOOM_MIN*2;
        }
        else if (fzoom <= ZOOM_MIN*4)
        {
            m_pDoc->m_fScaleFactor = ZOOM_MIN;
        }
        else
        {
            m_pDoc->m_fScaleFactor = ZOOM_NORMAL;
        }
    }
    OnUpdate(NULL, 0, NULL);
    UpdateRulersInfo(RW_RESIZE, NULL);
}
void CGreenOpenPaintView::OnButtonNormal()
{
    m_pDoc->m_fScaleFactor = ZOOM_NORMAL;
    OnUpdate(NULL, 0, NULL);
    UpdateRulersInfo(RW_RESIZE, NULL);
}
现在就可以正常缩放了。
处理mousewheel事件,这样就可以处理滚动和在按住ctrl下的缩放了
BOOL CGreenOpenPaintView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
    if (nFlags == MK_CONTROL) //控制放大缩小
    {
        if (zDelta > 0)
        {
            OnButtonZoomin();
        }
        else
        {
            OnButtonZoomout();
        }
    }
    else
    {
        int iPos = GetScrollPos(SB_VERT);
        if (zDelta > 0)
        {
            SetScrollPos(SB_VERT,iPos-150,TRUE);
        }
        else
        {
            SetScrollPos(SB_VERT,iPos+150,TRUE);
        }
        UpdateRulersInfo(RW_VSCROLL, GetScrollPosition());
        Invalidate(FALSE);
    }
    return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
RIBBON在使用的时候,还是容易出现一些小的问题。可能是因为它是新的框架,在和原来代码融合的时候存在一些问题。这一点也是在重构的过程中发现出来的。

GreenOpenPaint的实现(四)放大缩小处理滚动事件的更多相关文章

  1. 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)

    这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...

  2. viewer && ImageFlow 图片滚动组件 图片点击放大 可以滚轮放大缩小 viewer

    ImageFlow https://finnrudolph.com/products/imageflow https://github.com/countzero/ImageFlow http://w ...

  3. HYStockChart, 股票图(包括K线图、趋势图、成交量、滚动、放大缩小等)

    HYStockChart, 股票图(包括K线图.趋势图.成交量.滚动.放大缩小等) https://www.helplib.com/GitHub/article_127980git 地址 http:/ ...

  4. ThreeJs 导入外部三维模型,并实现鼠标滚动放大缩小旋转效果

    let i = ; function init() { // create a scene, that will hold all our elements such as objects, came ...

  5. js点击图片查看大图,并可以拖动,且滚动滑轮放大缩小

    方法一:此方法在页面没有滚动条时无法缩放 JQuery function hideMax(){ $(".MAX_div").remove(); $("#Cover_Div ...

  6. C# GDI绘制矩形框,鼠标左键拖动可移动矩形框,滚轮放大缩小矩形框

    最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置.网上查了一些感觉他们做的挺复杂的.我自己研究一天,做了一个比较简单的,发表出来供大家参考一下.如觉得简单,可路过,谢谢.哈哈. 先大 ...

  7. Canvas实现图片放大缩小移动操作

    对于HTML5相信大家都不陌生,很早就出来了,但是貌似都没有真正的使用过.最近做项目时要实现这样一个需求:一个图片,大小不固定,要求能实现类似地图一样放大.缩小.移动功能.这里就很合适使用html5的 ...

  8. vue项目 一行js代码搞定点击图片放大缩小

    一行js代码搞定xue项目需要点击图片放大缩小,其实主要用的是用到了vue:class的动态切换,内容比较简单.一开始我把维护的需求想得太复杂了,和测试小姐姐聊了一下才反应过来. 两个月不到跟了四个项 ...

  9. jquery 实现点击图片居住放大缩小

    该功能是基于jquery实现的,所以 第一步则是引入jquery jquery下载地址:https://jquery.com/download/ 或者使用此时调试的版本(3版本) /*! jQuery ...

随机推荐

  1. ring0 根据EThread遍历线程

    ntdll!_ETHREAD +0x000 Tcb : _KTHREAD +0x200 CreateTime : _LARGE_INTEGER 0xff58b008 +0x208 ExitTime : ...

  2. thinkphp5.0开发规范

    命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录不强制规范,驼峰及小写+下划线模式均支持: 类库.函数文件统一以.php为后缀: 类的文 ...

  3. activemq 实战二 连接到ActiveMQ-Connecting to ActiveMQ

    The main role of a JMS broker such as ActiveMQ is to provide a communication infrastructure for clie ...

  4. Sass-学习笔记【基础篇】

    最下边附结构图 在线编辑器网址如下:http://sassmeister.com/  注意编写的时候,符号千万别用了中文的:.:.....之类的,会报错,Sass也转换不成css. less和sass ...

  5. SRC常见WEB漏洞系列之HTTP-HOST头攻击

    一.背景: web程序需要知道网站的域名比较麻烦,需要使用HTTP的 host头字段: <?php _SERVER["HTTP_HOST"] ?> @app.route ...

  6. windows 下,go语言 交叉编译

    http://bbs.csdn.net/topics/390601048 参考上面的操作

  7. 优雅的go语言--入门篇

    1.特点 1.静态类型,编译型的开源语言 2.脚本华的语法,支持多种编程范式(函数式&面向对象) 3.原生,给力的并发编程的支持 2.优势 1.脚本化的语法 2.静态类型+编译型,程序运行速度 ...

  8. Linux系统下 MongoDB安装搭建

    1.下载linux的mongodb 2.在目录usr/local下创建文件夹mongodb,把安装包解压到该文件夹中 # mkdir mongodb # tar -zxvf mongodb-3.4.2 ...

  9. pta 习题集5-17 家谱处理

    人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究.实验中,使用计算机处理家谱.为了实现这个目的,研究人员将家谱转换为文本文件.下面为家谱文本文件的实例: John Robert F ...

  10. Linux的操作系统I2C驱动架构解说

    Linux的操作系统I2C驱动架构解说 发布时间:2006.10.16 04:52 来源:赛迪网技术社区 作者:LoneStar 最近因为工作需要涉及到了I2C总线.虽然我过去用过I2c,但看了 Li ...