topguntoo 2023-04-23 17:02 采纳率: 44.4%
浏览 46
已结题

MFC TeeChart8 如何标注曲线上鼠标指定坐标的数据,在曲线图上显示数据

MFC TeeChart8 如何标注曲线上鼠标指定坐标的数据,在曲线图上显示数据?并且要可标注多个点

img

  • 写回答

5条回答 默认 最新

  • Leodong. 2023-04-23 17:08
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    要在 MFC TeeChart8 中标注曲线上鼠标指定坐标的数据,可以使用 TChart::OnMouseMove 事件获取鼠标在曲线图上的坐标,然后使用 TChart::Series 属性获取曲线的数据,并在曲线图上绘制标注。

    以下是一个简单的示例代码:

    void CMyDlg::OnMouseMove(UINT nFlags, CPoint point) {
        // 调用父类的 OnMouseMove 函数以确保事件被正确处理
        CDialogEx::OnMouseMove(nFlags, point);
    
        // 获取鼠标在曲线图上的坐标
        TPoint mouse_point = Chart1.ScreenToChart(point);
    
        // 遍历所有曲线
        for (int i = 0; i < Chart1.SeriesCount(); i++) {
            TChartSeries* series = Chart1.Series(i);
    
            // 获取曲线的数据
            TChartValues* x_values = series->XValues;
            TChartValues* y_values = series->YValues;
    
            // 遍历曲线的数据
            for (int j = 0; j < series->Count(); j++) {
                double x = x_values->Value[j];
                double y = y_values->Value[j];
    
                // 判断鼠标是否在曲线上的某个点附近
                if (abs(mouse_point.x - Chart1.AxisBottom->CalcPosValue(x)) < 5 &&
                    abs(mouse_point.y - Chart1.AxisLeft->CalcPosValue(y)) < 5) {
                    // 在曲线图上绘制标注
                    TAnnotationTool* annotation = new TAnnotationTool(Chart1.Chart);
                    annotation->Text = FormatFloat("#.##", y);
                    annotation->Shape->CustomPosition = true;
                    annotation->Shape->Left = Chart1.AxisBottom->CalcPosValue(x);
                    annotation->Shape->Top = Chart1.AxisLeft->CalcPosValue(y) - 20;
                    Chart1.Tools->Add(annotation);
                }
            }
        }
    }
    

    在上面的代码中,我们首先获取鼠标在曲线图上的坐标,并遍历所有曲线。然后,使用 TChartSeries 类的 XValuesYValues 属性获取曲线的数据,并遍历曲线的数据。在遍历过程中,判断鼠标是否在曲线上的某个点附近,如果是,则在曲线图上绘制标注。具体地,我们使用 TAnnotationTool 类来绘制标注,并设置标注的文本和位置。

    需要注意的是,上面的代码只能标注一个点。如果要标注多个点,可以将标注保存在一个数组中,并在 TChart::OnMouseMove 事件结束时一次性添加到 TChart::Tools 集合中。同时,为了避免重复标注,可以在添加标注前先检查是否已经存在相同位置的标注。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 创建了问题 4月23日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大