MFC 太极图绘制
绘制太极图的原理简单来说就是画两个半圆一黑一白,拼成一个正圆。再在
大圆的左侧和右侧画两个恰好相切的黑圆和白圆作为突出端。最后分别在这两
个 突 出 端 里 面 画 两 个 一 黑 一 白 的 小 洞 。 MFC 里 利 用 void
CDrawView::OnDraw(CDC* pDC) 这个函数进行绘图。
和课堂上绘制正弦曲线相比,如果用一笔一笔循环的方式画圆将会很复
杂,因此我就参考网上的,用Pie函数和Ellipse函数画弧和圆。画图用了
CBrush画刷和CPen画笔。
其余代码与画正弦的代码一样,OnDraw函数部分代码如下:
void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
CBrush blackBrush,whiteBrush; //画太极图
CPen blackPen,whitePen;
blackPen.CreatePen(PS_SOLID | PS_COSMETIC,1,RGB(0,0,0));
whitePen.CreatePen(PS_SOLID | PS_COSMETIC,1,RGB(255,255,255));
blackBrush.CreateSolidBrush(RGB(0,0,0)); //黑色笔刷
whiteBrush.CreateSolidBrush(RGB(255,255,255)); //白色笔刷
CBrush *oldBrush = pDC->SelectObject(&blackBrush);
CPen *oldPen = pDC->SelectObject(&blackPen);
CRect rect(100,100,400,400); //用于画图的矩形
pDC->Pie(&rect,CPoint(100,250),CPoint(400,250)); //画一个半圆填涂成黑色
pDC->SelectObject(&blackPen);
pDC->SelectObject(&whiteBrush);
pDC->Pie(&rect,CPoint(400,250),CPoint(100,250)); //将另外半圆填充成白色(黑边白里)
pDC->SelectObject(&blackBrush);
pDC->SelectObject(&blackPen);
pDC->Ellipse(100,175,250,325); //画一个黑色的圆构成太极的一个突出端
pDC->SelectObject(&whiteBrush);
pDC->SelectObject(&whitePen);
pDC->Ellipse(250,175,400,325); //画一个白色的圆构成太极的另一个突出端
pDC->Ellipse(155,230,195,270); //在黑色的那一半画一个白色的小圆
pDC->SelectObject(&blackBrush);
pDC->SelectObject(&blackPen);
pDC->Ellipse(305,230,345,270); //在白色的一半画另一个小黑圆。
pDC->SelectObject(oldPen);
pDC->SelectObject(oldBrush);
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
评论0