MFC TeeChart8 如何标注曲线上鼠标指定坐标的数据,在曲线图上显示数据?并且要可标注多个点
MFC TeeChart8 如何标注曲线上鼠标指定坐标的数据,在曲线图上显示数据
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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
类的XValues
和YValues
属性获取曲线的数据,并遍历曲线的数据。在遍历过程中,判断鼠标是否在曲线上的某个点附近,如果是,则在曲线图上绘制标注。具体地,我们使用TAnnotationTool
类来绘制标注,并设置标注的文本和位置。需要注意的是,上面的代码只能标注一个点。如果要标注多个点,可以将标注保存在一个数组中,并在
TChart::OnMouseMove
事件结束时一次性添加到TChart::Tools
集合中。同时,为了避免重复标注,可以在添加标注前先检查是否已经存在相同位置的标注。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
解决 无用评论 打赏 举报
悬赏问题
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大