做一个振幅可以改变的正弦曲线的vc小程序,但是坐标轴可以画出来,正弦曲线出不来,高手给分析一下程序吧~void CSinxDlg::OnBtn() 
{
// TODO: Add your control notification handler code here
CWnd* pWnd=GetDlgItem(IDC_SRC);
CDC* pDC=pWnd->GetDC(); pDC->Rectangle(0,0,400,300); CPen redpen(PS_SOLID,1,RGB(255,0,0));
CPen* pOldPen=pDC->SelectObject(&redpen);
pDC->MoveTo(20,10);
pDC->LineTo(20,290);
pDC->MoveTo(20,150);
pDC->LineTo(380,150);

CString sPIText[]={"0","1/2π","π","3/2π","2π","5/2π","3π"}; for (int i=0;i<7;i++)
{
pDC->MoveTo(60*i+20,150);
pDC->LineTo(60*i+20,145);
pDC->TextOut(60*i+15,153,sPIText[i]);
} CString sYText[]={"-2","-3/2","-1","-1/2","","1/2","1","3/2","2"};
for (int j=0,m=0;m<9;j++,m++)
{
pDC->MoveTo(20,250-25*j);
pDC->LineTo(23,250-25*j);
pDC->TextOut(5,250-25*j,sYText[m]);
}
pDC->SelectObject (pOldPen); double radian,y;
UpdateData();
double m_pi;
m_pi=m_radius;
for (i=20;i<380;i++)
{
radian=(i-20)/((double)60*2)*PI;
y=150-sin(radian)*50*m_pi;
pDC->MoveTo(i,(int)y);
pDC->LineTo(i,(int)y);
}
}

解决方案 »

  1.   

    小弟明白了,其实最后两句:
     pDC->MoveTo(i,(int)y);
     pDC->LineTo(i,(int)y);
    进行画线的时候是显示的正弦曲线上的一些点,但是此时系统画笔的宽度为1,当画笔宽度为1时,是不显示绘制的每个点的,当把画笔的宽度改为2或者更大的时候就可以显示啦~
      

  2.   

    如果画曲线,简单点的还是用GDI+会更方便,给他一堆点的集合就好了,还有一些特效
    当然,你会牺牲一些效率