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

缩放这块,主要就是处理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. django 文档

    django 学习文档 https://yiyibooks.cn/xx/django_182/index.html

  2. Egret3D学习笔记一 (Unity插件使用)

    一 官方教程: http://developer.egret.com/cn/github/egret-docs/Engine3D/getStarted/getStarted/index.html 大部 ...

  3. 【BZOJ4337】BJOI2015 树的同构 括号序列

    [BZOJ4337]BJOI2015 树的同构 Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱 ...

  4. Android中textView自动识别电话号码,电子邮件,网址(自动加连接)

    extends:http://blog.csdn.net/wx_962464/article/details/8471195 其实这个是很简单的,在android中已经为我们实现了,但是我估计很多人都 ...

  5. Android Thread Handler UIHandler demos

    extends:http://blog.csdn.net/superjunjin/article/details/7540064 序效果:为了显示如何用message传值的简单例子 例1,点击按钮,持 ...

  6. ListView之EmptyView

    From:http://blog.csdn.net/xiangqiao123/article/details/17994099 继承ListActivity比较方便 最新开发一个应用程序,需要用到当L ...

  7. 【office2010】office2010安装问题的解决方案。

    今天想在公司电脑上按上一个office2010,结果出现一个问题,导致研究了一下午才解决:现总结解决方案: 安装office 2010,提示需要安装MSXML版本6.10.1129.0组件.但是在网上 ...

  8. 通过JS模拟select表单,达到美化效果[demo]

    .m-form{background:#fff;padding:50px;font-family:12px/1.5 arial,\5b8b\4f53,sans-serif;} .m-form ul,. ...

  9. 170612、web如何项目优化

    Web性能优化分为服务器端和浏览器端两个方面. 一.浏览器端,关于浏览器端优化,分很多个方面1.压缩源码和图片JavaScript文件源代码可以采用混淆压缩的方式,CSS文件源代码进行普通压缩,JPG ...

  10. V2EX的RSS订阅地址

    1.全站RSS输出: https://www.v2ex.com/index.xml 2.单独节点RSS输出: http://www.v2ex.com/feed/{节点名}.xml  以shadowso ...