📄 graph.cpp
字号:
{
case 1 :
if(graphType != SCATTER_GRAPH)
{
POSITION pos;
pos = graphSeries->GetHeadPosition();
CGraphSeries* tmpSeries;
for(int x = 1; x <= graphSeries->GetCount(); x++)
{
tmpSeries = (CGraphSeries*)graphSeries->GetNext(pos);
seriesSpace = xAxisWidth / graphSeries->GetCount();
tickXLocation = xApexPoint + ((x * seriesSpace) - (seriesSpace / 2));
pDC->MoveTo(tickXLocation,yApexPoint - 3);
pDC->LineTo(tickXLocation,yApexPoint + 3);
//draw tick label
CString tickLabel;
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
tickLabel = tmpSeries->GetLabel();
if(!xAxisAlign) //horizontal
pDC->TextOut(tickXLocation - ((tickLabel.GetLength() * 8) / 2), yApexPoint + 8, tickLabel);
else
{
CFont sideFont2;
sideFont2.CreateFont(xTickFontSize, 0, (xAxisAlign * 10), 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&sideFont2);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
if(xAxisAlign < 180)
pDC->TextOut(tickXLocation - 8, yApexPoint + 8 + (xAxisLabelLength * charWidth), tickLabel);
else
pDC->TextOut(tickXLocation + 2, yApexPoint + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
rightXTick = tickXLocation;
}
}
else
{
//scatter graphs will use the same tick marking on both axis lines
seriesSpace = (xAxisWidth - 20) / numTicks;
for(int x = 1; x <= numTicks; x++)
{
tickXLocation = xApexPoint + (x * seriesSpace);
//draw tick mark
pDC->MoveTo(tickXLocation, yApexPoint - 3);
pDC->LineTo(tickXLocation, yApexPoint + 3);
//draw tick label
CString tickLabel;
CFont xFont;
tickLabel.Format("%d", x * tickSpace);
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
pDC->TextOut(tickXLocation - (tickLabel.GetLength() * charWidth / 2), yApexPoint + 8, tickLabel);
rightXTick = tickXLocation;
pDC->SelectObject(pOldFont);
}
}
break;
case 2 :
if(graphType != SCATTER_GRAPH)
{
POSITION pos;
pos = graphSeries->GetHeadPosition();
CGraphSeries* tmpSeries;
seriesSpace = xAxisWidth / graphSeries->GetCount();
for(x = 1; x <= graphSeries->GetCount() / 2; x++)
{
tmpSeries = (CGraphSeries*)graphSeries->GetNext(pos);
tickXLocation = xApexPoint - (xAxisWidth / 2) + ((x * seriesSpace) - (seriesSpace / 2));
pDC->MoveTo(tickXLocation,yApexPoint - 3);
pDC->LineTo(tickXLocation,yApexPoint + 3);
if(!inRedraw)
{
//draw tick label
CString tickLabel;
tickLabel = tmpSeries->GetLabel();
if(!xAxisAlign) //horizontal
{
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->TextOut(tickXLocation - ((tickLabel.GetLength() * 8) / 2), yApexPoint + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
else
{
CFont sideFont2;
sideFont2.CreateFont(xTickFontSize, 0, (xAxisAlign * 10), 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&sideFont2);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
if(xAxisAlign < 180)
pDC->TextOut(tickXLocation - 8, yApexPoint + 8 + (xAxisLabelLength * charWidth), tickLabel);
else
pDC->TextOut(tickXLocation + 2, yApexPoint + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
}
rightXTick = tickXLocation;
}
if((graphSeries->GetCount() % 2) > 0)
{
tmpSeries = (CGraphSeries*)graphSeries->GetNext(pos);
tickXLocation = xApexPoint;
pDC->MoveTo(tickXLocation,yApexPoint - 3);
pDC->LineTo(tickXLocation,yApexPoint + 3);
if(!inRedraw)
{
//draw tick label
CString tickLabel;
tickLabel = tmpSeries->GetLabel();
if(!xAxisAlign) //horizontal
{
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->TextOut(tickXLocation - ((tickLabel.GetLength() * 8) / 2), yApexPoint + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
else
{
CFont sideFont2;
sideFont2.CreateFont(xTickFontSize, 0, (xAxisAlign * 10), 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&sideFont2);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
if(xAxisAlign < 180)
pDC->TextOut(tickXLocation - 8, yApexPoint + 8 + (xAxisLabelLength * charWidth), tickLabel);
else
pDC->TextOut(tickXLocation + 2, yApexPoint + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
}
rightXTick = tickXLocation;
x++;
}
for(; x <= graphSeries->GetCount(); x++)
{
tmpSeries = (CGraphSeries*)graphSeries->GetNext(pos);
tickXLocation = xApexPoint - (xAxisWidth / 2) + ((x * seriesSpace) - (seriesSpace / 2));
pDC->MoveTo(tickXLocation,yApexPoint - 3);
pDC->LineTo(tickXLocation,yApexPoint + 3);
if(!inRedraw)
{
//draw tick label
CString tickLabel;
tickLabel = tmpSeries->GetLabel();
if(!xAxisAlign) //horizontal
{
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->TextOut(tickXLocation - ((tickLabel.GetLength() * 8) / 2), yApexPoint + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
else
{
CFont sideFont2;
sideFont2.CreateFont(xTickFontSize, 0, (xAxisAlign * 10), 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&sideFont2);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
if(xAxisAlign < 180)
pDC->TextOut(tickXLocation - 8, yApexPoint + 8 + (xAxisLabelLength * charWidth), tickLabel);
else
pDC->TextOut(tickXLocation + 2, yApexPoint + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
}
rightXTick = tickXLocation;
}
}
else
{
//scatter graphs will use the same tick marking on both axis lines
seriesSpace = xAxisWidth / numTicks;
for(x = 0; x <= numTicks / 2; x++)
{
tickXLocation = xApexPoint + 5 - (xAxisWidth / 2) + (x * seriesSpace);
//draw tick mark
pDC->MoveTo(tickXLocation, yApexPoint - 3);
pDC->LineTo(tickXLocation, yApexPoint + 3);
if(!inRedraw)
{
//draw tick label
CString tickLabel;
tickLabel.Format("%d", minTick + (x * tickSpace));
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
pDC->TextOut(tickXLocation - (tickLabel.GetLength() * charWidth / 2), yApexPoint + 8, tickLabel);
}
rightXTick = tickXLocation;
pDC->SelectObject(pOldFont);
}
//draw the 0
tickXLocation = xApexPoint;
if(!inRedraw)
{
//draw tick label
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
pDC->TextOut(tickXLocation - (charWidth / 2), yApexPoint + 8, "0");
}
for(; x <= numTicks; x++)
{
tickXLocation = xApexPoint - (xAxisWidth / 2) + (x * seriesSpace);
//draw tick mark
pDC->MoveTo(tickXLocation, yApexPoint - 3);
pDC->LineTo(tickXLocation, yApexPoint + 3);
if(!inRedraw)
{
//draw tick label
CString tickLabel;
tickLabel.Format("%d", (x / 2) * tickSpace);
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
pDC->TextOut(tickXLocation - (tickLabel.GetLength() * charWidth / 2), yApexPoint + 8, tickLabel);
}
rightXTick = tickXLocation;
pDC->SelectObject(pOldFont);
}
}
break;
case 3 :
if(graphType != SCATTER_GRAPH)
{
POSITION pos;
pos = graphSeries->GetHeadPosition();
CGraphSeries* tmpSeries;
for(int x = 1; x <= graphSeries->GetCount(); x++)
{
tmpSeries = (CGraphSeries*)graphSeries->GetNext(pos);
seriesSpace = xAxisWidth / graphSeries->GetCount();
tickXLocation = xApexPoint + ((x * seriesSpace) - (seriesSpace / 2));
pDC->MoveTo(tickXLocation,yApexPoint - 3);
pDC->LineTo(tickXLocation,yApexPoint + 3);
if(!inRedraw)
{
//draw tick label
CString tickLabel;
tickLabel = tmpSeries->GetLabel();
if(!xAxisAlign) //horizontal
{
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->TextOut(tickXLocation - ((tickLabel.GetLength() * 8) / 2), yApexPoint + (yAxisHeight / 2) + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
else
{
CFont sideFont2;
sideFont2.CreateFont(xTickFontSize, 0, (xAxisAlign * 10), 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&sideFont2);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
if(xAxisAlign < 180)
pDC->TextOut(tickXLocation - 8, yApexPoint + (yAxisHeight / 2) + 8 + (xAxisLabelLength * charWidth), tickLabel);
else
pDC->TextOut(tickXLocation + 2, yApexPoint + (yAxisHeight / 2) + 8, tickLabel);
pDC->SelectObject(pOldFont);
}
}
rightXTick = tickXLocation;
}
}
else
{
//scatter graphs will use the same tick marking on both axis lines
seriesSpace = (xAxisWidth - 20) / numTicks;
for(int x = 1; x <= numTicks; x++)
{
tickXLocation = xApexPoint + (x * seriesSpace);
//draw tick mark
pDC->MoveTo(tickXLocation, yApexPoint - 3);
pDC->LineTo(tickXLocation, yApexPoint + 3);
if(!inRedraw)
{
//draw tick label
CString tickLabel;
tickLabel.Format("%d", x * tickSpace);
CFont xFont;
xFont.CreateFont(xTickFontSize, 0, 0, 0, 700, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,"Arial");
pDC->SelectObject(&xFont);
pDC->GetTextMetrics(&tm);
charWidth = tm.tmAveCharWidth;
pDC->TextOut(tickXLocation - (tickLabel.GetLength() * charWidth / 2), yApexPoint + (yAxisHeight / 2) + 8, tickLabel);
}
rightXTick = tickXLocation;
pDC->SelectObject(pOldFont);
}
}
break;
case 4 :
if(graphType != SCATTER_GRAPH)
{
POSITION pos;
pos = graphSeries->GetHeadPosition();
CGraphSeries* tmpSeries;
seriesSpace = xAxisWidth / graphSeries->GetCount();
for(x = 1; x <= graphSeries->GetCount() / 2; x++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -