一、实验任务
二、主要功能模块
三、代码
//自定义坐标系模块
CDC* pDC = GetDC();//获得设备上下文
CRect rect;//定义矩形
GetClientRect(&rect);//获得矩形客户去大小
pDC->SetMapMode(MM_ANISOTROPIC);//自定义坐标系
pDC->SetWindowExt(rect.Width()/4, rect.Height()/4);//设置窗口范围
pDC->SetViewportExt(rect.Width(), -rect.Height());//x 轴水平向右,y 轴垂直向上
pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);//设置屏幕中心为坐标系原点
//创建画笔模块
CPen newPen, * oldPen;//定义画笔
newPen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0));//创建画笔
oldPen = pDC->SelectObject(&newPen);//选中 GDI 对象画笔
//创建透明画刷模块
CBrush * oldBrush;//定义画刷
oldBrush = (CBrush *)pDC->SelectStockObject(5);//选中透明画刷
//绘制圆形模块
pDC->Ellipse(CRect(-25, 25, 25,-25));//绘制图 4 中的圆①
pDC->Ellipse(CRect(51, 11, 73, -11));//绘制图 4 中的圆③
pDC->Ellipse(CRect(43, 19, 81, -19));//绘制图 4 中的圆②
//绘制多边形模块
CPoint p[8];//定义等分点数组
double thta;
thta = 2 * PI / 8;//thta 为圆的等分角
for (int i = 0; i < 8; i++)
{
p[i].x = 37 / 2 * cos(i * thta);
p[i].y = 37 / 2 * sin(i * thta);
}//计算等分点坐标
pDC->Polygon(p, 8);//依次各连接等分点
//绘制圆弧模块
pDC->Arc(CRect(36 - 25, 35 - 25, 36 + 25, 35 + 25),
CPoint(16,16), CPoint(49, 14));//绘制图 6 中的圆弧①
pDC->Arc(CRect(24 - 94, 65 - 94, 24 + 94, 65 + 94), CPoint(-9, -24), CPoint(72, -17));//绘制图 6 中的圆弧②
四、问题
为了防止先绘制的图形被后绘制图形的画刷覆盖,因此在这里创建透明画刷
啥意思?
CPen newPen, * oldPen;//定义画笔
为什么定义的一个是指针一个不是?
newPen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0));//创建画笔
oldPen = pDC->SelectObject(&newPen);//选中 GDI 对象画笔
CBrush * oldBrush;//定义画刷
默认透明是吗?
oldBrush = (CBrush *)pDC->SelectStockObject(5);//选中透明 画刷
这个5是啥,不应该是oldBrush吗?