目录
本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将及时删除
1.实验原理
CDC::Pie
BOOL Pie(int x1 ,int y1 ,int x2,int y2,int x3 ,int y3 ,int x4 ,int y4);
BOOL Pie(LPRECT lpRect,POINT ptStart ,POINT ptEnd);
返回值:如果成功,则返回非零值,否则为0。
参数:
x1 指定外接矩形左上角的X逻辑坐标。
y1 指定外接矩形左上角的Y逻辑坐标。
x2 指定外接矩形右下角的X逻辑坐标。
y2 指定外接矩形右下角的Y逻辑坐标。
x3 指定弧起点的X逻辑坐标。
y3 指定弧起点的Y逻辑坐标。
x4 指定弧终点的X逻辑坐标。
y4 指定弧终点的Y逻辑坐标。
lpRect 指定外接矩形,可以为该参数传递RECT结构或CRect对象。
ptStart 指定弧起点,可以为该参数传递POINT结构或CPoint对象。
ptEnd 指定弧终点,可以为该参数传递POINT结构或CPoint对象。
说明:
画一个饼图。由一段椭圆弧形成,其中心点和两个端点已经用线段连接。
弧中心是由x1,y1,x2,y2(或lpRect)指定的外接矩形的中心。弧的起点和终点由x3,y3,x4,y4(或ptStart和 ptEnd)指定。
弧由选定笔沿逆时针绘制,另外还有两条从端点到中心点的连线。饼图区域由当前画刷填充。
如果x3等于x4且y3等于y4,则结果为一个椭圆。
它只有一条中心点与点(x3,y3)或点(x4,y4)的连线。
该函数绘制的图形延伸到但不包括右边和底部坐标,即图形高度为y2-y1,宽度为x2-x1,外接矩形的宽度和高度都必须大于2单位且小于32,767单位。
2.主要代码
void C太极图View::OnDraw(CDC* pDC)
{
C太极图Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CRect rect;
GetClientRect(&rect); //lpRect 指向一个RECT结构或一个CRect对象,用于接收客户区坐标。left和top成员将被设为0。right和bottom成员将包含了窗口的宽度和高度。
pDC->SetMapMode(MM_ANISOTROPIC);//映射模式定义了将逻辑单位转换为设备单位的单位量,并定义了X和Y的方向
pDC->SetWindowExt(rect.Width(), rect.Height());//说明了GDI如何将逻辑坐标转换为设备坐标
pDC->SetViewportExt(rect.Width(), -rect.Height());
pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);//设置设备上下文的视图端口初始位置。
rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
CPen whitePen(PS_SOLID, 1, RGB(255, 255, 0));//此处为了将太极图白色部分便于与底图背景区分,白色画笔 白色画刷 用黄颜色替代
CBrush blackBrush(RGB(0, 0, 0));//黑画刷
CPen blackPen(PS_SOLID, 1, RGB(0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&blackPen);//用于保存旧画笔
CBrush* pOldBrush = pDC->SelectObject(&blackBrush);//用于保存旧画刷
pDC->Pie(-200, 200, 200, -200, 0, -200, 0, 200);//用于画右半圆
CBrush whiteBrush(RGB(255, 255, 0));//白画刷
pDC->SelectObject(&whiteBrush);
pDC->SetArcDirection(AD_CLOCKWISE);用于设置扇形的画线方向
pDC->SelectObject(&whitePen);
pDC->Pie(-200, 200, 200, -200, 0, -200, 0, 200);//用于画左半圆
pDC->Pie(-100, 200, 100, 0, 0, 0, 0, 0);//上方画白圆
pDC->SelectObject(&blackBrush);
pDC->SelectObject(&blackPen);
pDC->Pie(-100, 0, 100, -200, 0, 0, 0, 0);//下方画黑圆
pDC->Pie(-50, 150, 50, 50, 0, 25, 0, 25);//上方画黑圆
pDC->SelectObject(&whiteBrush);
pDC->SelectObject(&whitePen);
pDC->Pie(-50, -50, 50, -150, 0, -25, 0, -25);//下方画白圆
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
/*上方函数为绘制太极图代码*/
}