void CDataShow::Draw_Axis(CDC*pDC)
{
pDC->SetTextColor(text_color);
pDC->SelectObject(&m_pdc_axis.new_pen);
CRect rect;
SetDataRect();
rect=m_dataRect;
CString str;
int i;
int m_left,m_top,m_right,m_bottom;
m_left = rect.left;
m_top = rect.top;
m_right = rect.right;
m_bottom = rect.bottom;
double m_Interval_x = (m_right - m_left)/20;
double m_Interval_y = (-m_top+m_bottom)/10;
// 选中当前红色画笔,并保存以前的画笔
// CGdiObject* pOldPen = pDC->SelectObject(pPenRed);
// 绘制坐标轴
pDC->MoveTo(m_left,m_top-10);
// 垂直轴
pDC->LineTo(m_left,m_bottom);
// 水平轴
pDC->LineTo(m_right+10,m_bottom);
//原点坐标显示位置
m_pOrth.x=m_left;
m_pOrth.y=m_bottom;
// 写X轴刻度值
for(i=0;i<20;i++)
{
//str.Format(_T("%d"),m_Min+i*m_Interval);
str.Format(_T("%.1f"),GetAxisPosition(i,"x"));
pDC->TextOut(m_left+double(i*m_Interval_x),m_bottom+3,str);
}
//str.Format(_T("%d"),m_Max);
str.Format(_T("%.1f"),m_x_end);
pDC->TextOut(m_left+20*m_Interval_x,m_bottom+3,str);
//////////////////////////////////////////////////////////////////
// 绘制X轴刻度
for (i = 1; i <= 40; i ++)
{
if ((i%2) == 0)
{
// 10的倍数
pDC->MoveTo(i*m_Interval_x/2 + m_pOrth.x, m_bottom);
pDC->LineTo(i*m_Interval_x/2 + m_pOrth.x, m_bottom+8);
}
else
{
// 10的倍数
pDC->MoveTo(i*m_Interval_x/2 +m_pOrth.x, m_bottom);
pDC->LineTo(i*m_Interval_x/2 + m_pOrth.x, m_bottom+3);
}
}
// 绘制X轴箭头
pDC->MoveTo(m_right+5,m_bottom-5);
pDC->LineTo(m_right+10,m_bottom);
pDC->LineTo(m_right+5,m_bottom+5);
// 绘制Y轴箭头
pDC->MoveTo(m_left-5,m_top-5);
pDC->LineTo(m_left,m_top-10);
pDC->LineTo(m_left+5,m_top-5);
//////////////////////////////////////////////////////////////////
//数组赋值
//m_Interval = (m_High - m_Low)/20-2;
//m_Interval=(-m_Bottom+m_Top)/10-4;
//m_dnum_top_bottom=m_Interval;//Interval为间隔
CFont* pFont = pDC->GetCurrentFont();
LOGFONT logFont ;
pFont->GetLogFont(&logFont);
logFont.lfEscapement = 900 ;//900/10 = 90
HFONT hFont=CreateFontIndirect(&logFont);
pDC->SelectObject(hFont);
// 写y轴刻度值
for(i=0;i<10;i++)
{
//str.Format(_T("%d"),m_Min+i*m_Interval);
str.Format(_T("%.1f"),GetAxisPosition(i,"y"));
pDC->TextOut(m_pOrth.x-20,m_pOrth.y-(i)*m_Interval_y+10,str);
}
str.Format(_T("%.1f"),m_y_end);
pDC->TextOut(m_pOrth.x-20,m_pOrth.y-10*m_Interval_y+10,str);
// 绘制y轴刻度
for (i=1;i<=20;i++)
{
if (i%2 == 0)
{
// 10的倍数
pDC->MoveTo(m_pOrth.x, m_pOrth.y-i*m_Interval_y/2);
pDC->LineTo(m_pOrth.x-8, m_pOrth.y-i*m_Interval_y/2);
}
else
{
pDC->MoveTo(m_pOrth.x, m_pOrth.y-i*m_Interval_y/2);
pDC->LineTo(m_pOrth.x-5, m_pOrth.y-i*m_Interval_y/2);
}
}
DeleteObject(hFont);
pDC->SelectObject(pFont);
pFont->DeleteObject();
}
运行界面图如下:
7 个解决方案
#1
问题没 看明白
#2
估计还是坐标关系没有搞清楚
#3
应该是 误差 ,就 像用秤车重的地磅 秤人体重
#4
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法
#5
自己绘制需要处理很多细节,容易出错,用控件吧。
#6
就这东西你用得着自己绘制吗?让美工给你做张图,肯定比你这漂亮多了,边距什么的都规定好了,然后贴到DC上,之后你就可以在DC上绘制了!
#1
问题没 看明白
#2
估计还是坐标关系没有搞清楚
#3
应该是 误差 ,就 像用秤车重的地磅 秤人体重
#4
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法
#5
自己绘制需要处理很多细节,容易出错,用控件吧。
#6
就这东西你用得着自己绘制吗?让美工给你做张图,肯定比你这漂亮多了,边距什么的都规定好了,然后贴到DC上,之后你就可以在DC上绘制了!