画直线和曲线
MoveTo设定当前位置
LineTo 从当前位置画一条直线到指定位置
PolyLine 将一系列的点用线段连接起来
PolyLineTo 从当前位置开始将一系列的点用线段连接起来,并将当前位置移动到折线的终点。
Arc 画一个圆弧
ArcTo 画一个圆弧并将当前位置移动到弧的终点
PolyBezier 画一条或多条贝塞尔样式曲线
PolyBezierTo 画一条或多条贝塞尔样式曲线,并将当前位置移动到最后一条曲线的终点
PolyDraw 通过一组点画一系列线段和贝塞尔曲线,并将当前位置一道最后一个线段或曲线的终点。
pDC->MoveTo(20,20);
pDC->LineTo(20,40);
pDC->LineTo(40,40);
pDC->LineTo(40,20);
pDC->LineTo(20,20);
POINT aPoint[5]={50,30,60,72,46,67,74,23,24,67};
dc.PolylineTo(aPoint,5);
POINT aPoint1[4]={120,100,120,200,250,150,500,40};
POINT aPoint2[4]={120,100,50,350,250,200,500,40};
dc.PolyBezier(aPoint1,4);
dc.PolyBezier(aPoint2,4);
//无边框的矩形
dc.FillSolidRect(0,0,10,10,RGB(190,190,190));
dc.FillSolidRect(10,0,20,10,RGB(190,190,190));
Chord 画一个由直线和椭圆相交后围成的封闭图形
//0,0,200,200 直线 0,0,200,200 椭圆所在区域
dc.Chord(0,0,200,200,0,0,200,200);
获得椭圆指定角度的坐标
POINT CMfctestView::GetArcPoint(LPCRECT lpRect, double angle)
{
long a = abs((lpRect->right-lpRect->left)/2);
long b = abs((lpRect->bottom-lpRect->top)/2);
double radio;
POINT pt;
radio=(a*b)*1.0/sqrt((sin(angle)*sin(angle))*(a*a)+(cos(angle)*cos(angle))*(b*b));
long dx,dy;
double ax=cos(angle*(3.1415926/180));
double ay=sin(angle*(3.1415926/180));
dx=(long)(radio*ax);
dy=(long)(radio*ay);
pt.x=lpRect->left+a+dx;
pt.y=lpRect->top+b+dy;
return pt;
}
使用
CRect rcs(0,0,500,300);
dc.Arc(&rcs,GetArcPoint(&rcs,0),GetArcPoint(&rcs,270));
Ellipse 画一个圆或椭圆
Pie 画一个饼状的楔形物
dc.Pie(&rcs,GetArcPoint(&rcs,0),GetArcPoint(&rcs,270));
Polygon 连接一组点形成一个多边形
//画一个6边形
POINT aPoint[6]={200,200,500,200,500,300,400,300,400,500,200,500};
dc.Polygon(aPoint,6);
//画一个灰色的6边形
CRgn cr;
cr.CreatePolygonRgn(aPoint,6,ALTERNATE);
CBrush mbrush(RGB(192,192,192));
dc.FillRgn(&cr,&mbrush);
Rectangle 画一个带直角的矩形
RoundRect 画一个带圆角的矩形
POINT pt;
pt.x=20;
pt.y=20;
dc.RoundRect(&rcs,pt);
SetViewportOrg 设置坐标原点