把第一个纵坐标改成0-20,第二个改成0-500,现在不能改动,而且已改动两个都会同时变化,且图形并不随改动值的变化而变化,急用,跪求了……不胜感激……
void CScope::DrawAxis(CDC *pDC)
{
CFont *pOldFont;
int i,nPosY;
CString str;
pOldFont = pDC->SelectObject(&m_FontAxis);
pDC->SetTextColor(RGB(255,255,0));
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextAlign(TA_RIGHT|TA_BASELINE);
int nCenterY = m_rectCurve.top+(int)((double)m_nBase/(double)m_nRange*m_rectCurve.Height());
nPosY = nCenterY;
if(nPosY<=m_rectCurve.top+10)
nPosY += 10;
if(m_dDimY pDC->TextOut(m_rectCurve.left-2,nPosY,CString("0.0"));
else
pDC->TextOut(m_rectCurve.left-2,nPosY,CString("0"));
for(i=1;i<=14;i++)
{
nPosY =nCenterY+i*m_rectCurve.Height()/14;
if(nPosY<=m_rectCurve.bottom)
{
if(m_dDimY<1)
str.Format("%.1f",-i*m_dDimY);
else if(m_dDimY<1000)
str.Format("%.0f",-i*m_dDimY);
else
str.Format("%.0fK",-i*m_dDimY/1000);
pDC->TextOut(m_rectCurve.left-2,nPosY,str);
}
}
for(i=1;i<=14;i++)
{
nPosY = nCenterY-i*m_rectCurve.Height()/14;
if(nPosY>=m_rectCurve.top)
{
if(nPosY<=m_rectCurve.top+10)
nPosY += 10;
if(m_dDimY<1)
str.Format("%.1f",i*m_dDimY);
else if(m_dDimY<1000)
str.Format("%.0f",i*m_dDimY);
else
str.Format("%.0fK",i*m_dDimY/1000);
pDC->TextOut(m_rectCurve.left-2,nPosY,str);
}
}
//横坐标
pDC->SetTextAlign(TA_LEFT|TA_TOP);
pDC->TextOut(m_rectCurve.left,m_rectCurve.bottom+2,CString("0"));
pDC->SetTextAlign(TA_CENTER|TA_TOP);
for(i=1;i<=13;i++)
{
str.Format("%.0f",2*i*m_dDimT);
pDC->TextOut(m_rectCurve.left+i*m_rectCurve.Width()/14,m_rectCurve.bottom+2,str);
}
pDC->SetTextAlign(TA_RIGHT|TA_TOP);
//str.Format("%.0f",2*14*m_dDimT);
str.Format("T(s)");
pDC->TextOut(m_rectCurve.right+4,m_rectCurve.bottom+2,str);
pDC->SelectObject(&pOldFont);
}
该回答引用ChatGPT
把第一个纵坐标改成0-20,第二个改成0-500需要进行如下步骤:
找到变量m_dDimY,它控制纵坐标的范围。
找到变量m_nBase和m_nRange,它们决定纵坐标显示的位置。
修改m_dDimY的值,使其从原来的范围(0-10)变成新的范围(0-20)。
修改m_nBase的值,使其从原来的位置(m_rectCurve.bottom)变成新的位置(m_rectCurve.bottom - m_nRange * 20 / m_dDimY)。
修改m_nRange的值,使其从原来的范围(10)变成新的范围(20)。
找到显示纵坐标刻度的代码块,在其中的格式化字符串语句中,将除数从原来的1改成2,从而保持显示的值正确。
找到显示横坐标的代码块,将格式化字符串语句中的数值范围从原来的(0-28)改成新的范围(0-26)。