首页 > 其他分享 >MFC CChartCtrl 滚轮缩放

MFC CChartCtrl 滚轮缩放

时间:2024-11-18 15:08:31浏览次数:1  
标签:CChartCtrl MaxVal MFC pt MinVal 缩放 rate ZoomCenter pAxes

原文来自:MFC그래프 라이브러리, ChartCtrl 마우스 휠 기능 추가

BOOL CChartCtrl::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
    ScreenToClient(&pt);
    double MinVal = 0;
    double MaxVal = 0;

    double rate = 0.1;

    if (m_bZoomEnabled)
    {
        if (zDelta > 0)
        {
            rate = rate * 1;
        }
        else
        {
            rate = rate * -1;
        }

        double ZoomCenter = 0;

        if (m_pAxes[BottomAxis])
        {
            m_pAxes[BottomAxis]->GetMinMax(MinVal, MaxVal);
            ZoomCenter = m_pAxes[BottomAxis]->ScreenToValue(pt.x);
            MinVal = MinVal + (ZoomCenter - MinVal) * rate;
            MaxVal = MaxVal - (MaxVal - ZoomCenter) * rate;
            m_pAxes[BottomAxis]->SetZoomMinMax(MinVal, MaxVal);
        }

        if (m_pAxes[LeftAxis])
        {
            m_pAxes[LeftAxis]->GetMinMax(MinVal, MaxVal);
            ZoomCenter = m_pAxes[LeftAxis]->ScreenToValue(pt.y);
            MinVal = MinVal + (ZoomCenter - MinVal) * rate;
            MaxVal = MaxVal - (MaxVal - ZoomCenter) * rate;
            m_pAxes[LeftAxis]->SetZoomMinMax(MinVal, MaxVal);
        }

        if (m_pAxes[TopAxis])
        {
            m_pAxes[TopAxis]->GetMinMax(MinVal, MaxVal);
            ZoomCenter = m_pAxes[TopAxis]->ScreenToValue(pt.x);
            MinVal = MinVal + (ZoomCenter - MinVal) * rate;
            MaxVal = MaxVal - (MaxVal - ZoomCenter) * rate;
            m_pAxes[TopAxis]->SetZoomMinMax(MinVal, MaxVal);
        }

        if (m_pAxes[RightAxis])
        {
            m_pAxes[RightAxis]->GetMinMax(MinVal, MaxVal);
            ZoomCenter = m_pAxes[RightAxis]->ScreenToValue(pt.y);
            MinVal = MinVal + (ZoomCenter - MinVal) * rate;
            MaxVal = MaxVal - (MaxVal - ZoomCenter) * rate;
            m_pAxes[RightAxis]->SetZoomMinMax(MinVal, MaxVal);
        }

        RefreshCtrl();

        if (m_PlottingRect.PtInRect(pt))
        {
            TCursorMap::iterator iter = m_mapCursors.begin();
            for (iter; iter != m_mapCursors.end(); iter++)
                iter->second->OnMouseButtonUp(pt);

            Invalidate();
        }

    }

    return CWnd::OnMouseWheel(nFlags, zDelta, pt);
}
View Code

 

标签:CChartCtrl,MaxVal,MFC,pt,MinVal,缩放,rate,ZoomCenter,pAxes
From: https://www.cnblogs.com/chao-ye/p/18552726

相关文章

  • 攻防世界-mfc逆向
    文件被加了vmp,静态分析难度很大运行程序 发现是mfc框架程序,根据提示应该在控件里去找,可以用xspy进行分析 发现窗口句柄中有一串密文944c8d100f82f0c18b682f63e4dbaa207a2f1e72581c2f1b,并且发现一条特殊的onMsgOnMsg:0464,func=0x00402170(MFC1.exe+0x002170),它并不是以......
  • 数据缩放方法总结
    数据缩放(DataScaling)是数据预处理的一种重要方法,用于将不同取值范围的特征值调整到统一的范围,从而提高机器学习模型的性能和稳定性。本文将总结常见的数据缩放方法,并分析它们的优缺点及适用场景。1.均值归一化(MeanNormalization):将数据缩放到[-1,1]的范围内,使数据的均值为0。具......
  • 【MFC编程(四)】图形图像:CDC类与GDI绘图
    文章目录绘图引擎简介GDI绘图DC设备上下文CDC类HDC和CDC的区别与转换屏幕绘图成员函数绘制点绘制直线绘制矩形绘制椭圆绘制多边形绘制文本绘制位图绘图引擎简介Windows环境下二维绘图引擎有多种选择:GDI、GDI+、DirectDraw、Qt/QPainter、Agg、Cairo、skia、Direct2......
  • 找不到mfc140u.dll,无法继续执行代码的原因分析与解决方案
    mfc140u.dll是MicrosoftFoundationClasses(MFC)库的一部分,它是VisualStudio2015中的一个重要组件。MFC提供了一组预定义的类和函数,用于简化Windows应用程序的开发过程。mfc140u.dll文件包含了这些类和函数的实现,许多基于MFC开发的应用程序依赖于它来正常运行。......
  • 质子交换膜燃料电池(PEMFC Simulink模型)
        ......
  • [QT QCustomPlot]实时折线图(坐标轴可缩放)
    [QTQCustomPlot]实时折线图(坐标轴可缩放)1.QCustomPlot介绍QCustomPlot是一个用于Qt框架的高性能、可扩展的图表库,专门设计用于显示和交互复杂的绘图。它提供了一个非常灵活的接口,允许开发者在Qt应用程序中轻松地实现各种图表和图形。以下是QCustomPlot的一些关键......
  • Python图像处理库PIL,实现旋转缩放、剪切拼接以及滤波
    文章目录切割缩放和旋转拼接PIL的Image类,提供了一些常用的图像处理方法。切割缩放和旋转PIL可以很方便地实现如下效果代码如下fromPILimportImagepath='lena.jpg'img=Image.open(path)#读取img.resize((50,50),resample=Image.Resampling.NEARES......
  • Geogebra基础篇019—Geogebra的移动工具(单选、框选、沿点线面体拖动、自由旋转、指定
    注意:关注微信公众号“第五智能”,免费查阅全系列文章(或者微信顶部直接搜索“Geogebra的移动工具”就可以找到了)。关于Geogebra移动工具的知识还是比较繁琐的,比如视图中的对象,大家都知道点击单选,但是怎么框选呢?怎么横移画布、怎么沿点拖动、沿线拖动、沿面拖动、甚至是沿体积......
  • VS中MFC如何调用通过C#封装的dll库?
    (1)打开工程属性——配置属性——常规将右侧界面中的MFC的使用一栏改为:在共享DLL中使用MFC(2)同页面中,将字符集改为:使用多字节字符集(3)同页面中,将公共语言运行时支持改为:公共语言运行时支持(/clr)vs2010:vs2022:(4)工程属性——配置属性——C/C++——常规将右侧调试信息格式......
  • MFC的SendMessage与PostMessage的区别
    一、SendMessage同步操作:SendMessage是一个同步函数,它会将消息发送到指定的窗口,并等待该窗口的消息处理过程完成,然后返回。这意味着它会阻塞当前线程,直到消息处理完成。直接调用:SendMessage会将消息直接传递给目标窗口的消息处理函数,因此消息处理函数在当前线程中执行......