MFC 單文檔 如何畫正弦曲線
1.畫筆類,CPen,創(chuàng)建畫筆類的對(duì)象后,需要調(diào)用CreatePen(......)函數(shù)創(chuàng)建畫筆。然后將其選入設(shè)備描述表中。
pDC->SelectObject(.......);
2.設(shè)置起點(diǎn)坐標(biāo)。在這里調(diào)用一個(gè)函數(shù)來設(shè)置坐標(biāo)原點(diǎn)。
pDC->SetViewportOrg(100,255);
3.調(diào)用LineTo(point),MoveTo(Point)函數(shù)畫圖。
4.刪除創(chuàng)建的畫筆對(duì)象。pen.DeleteObject();
以下是今天所寫的畫正弦函數(shù)的圖像。創(chuàng)建一個(gè)單文檔的應(yīng)用程序。并且在VIEW類中的OnDraw(。。。。)函數(shù)里面做消息響應(yīng)。由于調(diào)用了sin()函數(shù),所以要把math.h頭文件包含進(jìn)來。#include "math.h"
void CDrawSinXView::OnDraw(CDC* pDC)
{
CDrawSinXDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//建立畫筆
CPen pen_Zuobixi,pen_sinx;
pen_Zuobixi.CreatePen(PS_SOLID,4,RGB(0,0,0));
pen_sinx.CreatePen(PS_SOLID,2,RGB(0,0,255));
pDC->SelectObject(&pen_Zuobixi);
//指定原點(diǎn)
pDC->SetViewportOrg(100,255);
pDC->SetTextColor(RGB(255,0,0));
//繪制橫坐標(biāo)
CString sPIText[]={"-1/2π","","1/2π","π","3/2π","2π","5/2π","3π","7/2π","4π","9/2π","5π"};
int n=-1;
int nTemp=0;
while (nTemp<=660)
{
pDC->LineTo(60*n,0);
pDC->LineTo(60*n,-5);
pDC->MoveTo(60*n,0);
pDC->TextOut(60*n-sPIText[n+1].GetLength()*3,16,sPIText[n+1]);
n++;
nTemp +=60;
}
pDC->MoveTo(0,0);
CString strTemp;
//繪制縱坐標(biāo)
for(n=-4,nTemp = 0;nTemp<=180;n++,nTemp+=60)
{
pDC->LineTo(0,60*n);
pDC->LineTo(5,60*n);
pDC->MoveTo(0,60*n);
strTemp.Format("%d",-n);
pDC->TextOut(10,60*n,strTemp);
}
double y,radian;
pDC->SelectObject(&pen_sinx);
for(int x=-60;x<600;x++)
{
//弧度=X坐標(biāo)/曲線寬度*角系數(shù)*π
//Y坐標(biāo)=振幅*曲線寬度*sin(弧度)
radian =x/((double)60*2)*PI;
y=sin(radian)*2*60;
pDC->MoveTo((int)x,(int)y);
pDC->LineTo((int)x,(int)y);
}
pen_sinx.DeleteObject();
pen_Zuobixi.DeleteObject();
}
聯(lián)系客服