首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

绘制坐标轴刻度不符有关问题

2013-12-19 
绘制坐标轴刻度不符问题。如下是我绘制坐标轴代码,鼠标十字线移动显示值与刻度不符,而右上角点坐标是设定好

绘制坐标轴刻度不符问题。
如下是我绘制坐标轴代码,鼠标十字线移动显示值与刻度不符,而右上角点坐标是设定好的【40,520】请各位帮小弟看看,小弟那里错了。拜谢!
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();


}
运行界面图如下:
绘制坐标轴刻度不符有关问题
http://blog.csdn.net/baita96/

热点排行