我使用以下方法来获取 x 轴和 y 轴坐标。但是我无法获得 y 轴坐标。
**/*X axis max*/**
double xMaxAxisBottom = m_Chart.GetAxis().GetBottom().GetMaximum();// try to get x axis
double xMaxAxisBottomPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(xMaxAxisBottom); // Here trying to position based on x-axis co-ordinate
**/*X axis min*/**
double xMinAxisBottom = m_reschedChart.GetAxis().GetBottom().GetMinimum();//// try to get x axis minimum
double xMinAxisBottomPixelPos = m_Chart.GetAxis().GetBottom().MinXValue();
**/*Y axis max*/**
double xMaxAxisLeft = m_reschedChart.GetAxis().GetLeft().GetMaximum();
double xMaxAxisLeftPixelPos = m_reschedChart.GetAxis().GetLeft().MaxXValue();
**/*Y axis min*/**
double xMinAxisLeft = m_Chart.GetAxis().GetLeft().GetMinimum();
double xMinAxisLeftPixelPos = m_Chart.GetAxis().GetLeft().MinXValue();
**/*X axis length*/**
double xAxisBottomLen = m_Chart.GetAxis().GetBottom().GetEndPosition() - m_Chart.GetAxis().GetBottom().GetStartPosition();
double xAxisBottomLenPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(xAxisBottomLen);
**/*Y axis length*/**
double yAxisLeftLen = m_Chart.GetAxis().GetLeft().GetEndPosition() - m_Chart.GetAxis().GetLeft().GetStartPosition();
double xAxisLeftLenPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(yAxisLeftLen);
**/*X origin*/**
double dXstartPos = m_Chart.GetAxis().GetBottom().GetStartPosition();
double dXstartPixelPos = m_reschedChart.GetAxis().GetBottom().CalcXPosValue(dXstartPos);
**/*Y origin*/**
double dYStartPos = m_Chart.GetAxis().GetLeft().GetStartPosition();
double dYStartPixelPos = m_Chart.GetAxis().GetLeft().CalcXPosValue(dYStartPos);
如果我在找到坐标时犯了任何错误,请告诉我。我想在下面找到使用上述代码协调的提及。
最大
1 X 轴 最小
2 X 轴 最大
3 Y 轴 最小
4 Y 轴 5 X 轴长度
6 Y 轴长度
7 X 原产地
8 Y 原产地
9 标签字体大小
请让我知道你的看法。谢谢
需要绘制图表才能使用这些方法。它们需要初始化一些内部属性才能按预期工作。
您可以在调用它们之前强制重新绘制图表:
m_Chart.GetEnvironment().InternalRepaint();
编辑:
由于您似乎在 OnAfterDraw 事件中调用这些函数,因此您无需强制重新绘制图表。但是,我建议您对代码进行一些修改。
我看到你正在使用
m_Chart
,也正在使用m_reschedChart
.确保您使用的是正确的 TChart 变量。您的变量以
x
和y
开头,但 thay 还包括Bottom
或Left
,具体取决于它们所引用的轴。这是多余的,并增加了写错误的机会(即 x最大轴左)。CalcXPosValue
必须与水平轴一起使用,CalcYPosValue
必须与垂直轴一起使用。所以你不应该打电话给GetLeft().CalcXPosValue
.CalcXPosValue
和CalcYPosValue
是将轴值转换为屏幕像素的函数。MinXValue
和MaxXValue
将与水平轴一起使用,而MinYValue
和MaxYValue
将与垂直轴一起使用。GetMinimum
返回与MinXValue
/MinYValue
相同的值,GetMaximum
返回的返回与MaxXValue
/MaxYValue
相同。所有这些函数都返回轴值,而不是屏幕像素。GetStartPosition 和 EndStartPosition 被认为会修改轴长度,默认情况下,它们使用此处解释的百分比,因此
GetStartPosition - EndStartPosition
始终为零。我认为CalcXPosValue(GetStartPosition - EndStartPosition)
在概念上也是错误的。注意IStartPos
和IEndPos
为您提供开始和结束位置(以像素为单位)。请参阅此处的 TeeChart ActiveX 教程。
在下面找到我建议您的修改后的代码:
**/*X axis max*/**
double maxAxisBottom = m_Chart.GetAxis().GetBottom().GetMaximum();// try to get x axis
double maxAxisBottomPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(xMaxAxisBottom); // Here trying to position based on x-axis co-ordinate
**/*X axis min*/**
double minAxisBottom = m_Chart.GetAxis().GetBottom().GetMinimum();//// try to get x axis minimum
double minAxisBottomPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(minAxisBottom);
**/*Y axis max*/**
double maxAxisLeft = m_Chart.GetAxis().GetLeft().GetMaximum();
double maxAxisLeftPixelPos = m_Chart.GetAxis().GetLeft().CalcYPosValue(maxAxisLeft);
**/*Y axis min*/**
double minAxisLeft = m_Chart.GetAxis().GetLeft().GetMinimum();
double minAxisLeftPixelPos = m_Chart.GetAxis().GetLeft().CalcYPosValue(minAxisLeft);
现在您已经知道屏幕像素中四个正方形的位置,因此您可以使用它们绘制一个矩形来检查它:
m_Chart.getCanvas().Rectangle(minAxisBottomPixelPos, minAxisLeftPixelPos, maxAxisBottomPixelPos, maxAxisLeftPixelPos);
如果您还想要或需要以像素为单位的轴大小,您可以执行以下操作:
**/*X axis length*/**
double axisBottomLenPixelPos = m_Chart.GetAxis().GetBottom().GetIEndPos() - m_Chart.GetAxis().GetBottom().GetIStartPos();
**/*Y axis length*/**
double axisLeftLenPixelPos = m_Chart.GetAxis().GetLeft().GetIEndPos() - m_Chart.GetAxis().GetLeft().GetIStartPos();
您可以检查它们是否正确计算:
m_Chart.getCanvas().Rectangle minAxisBottomPixelPos, maxAxisLeftPixelPos, minAxisBottomPixelPos + axisBottomLenPixelPos, maxAxisLeftPixelPos + axisLeftLenPixelPos