mfc在屏幕绘制一任意多边形,完成该多边形的基本几何变换(包括平移、比例、旋转、反射和错切等变换)。
时间: 2023-07-31 08:04:21 浏览: 124
在MFC中,可以使用CDC类的函数来进行屏幕绘制和几何变换。下面是一个简单的示例代码,可以绘制一个任意多边形并对其进行基本几何变换:
```
void CMyView::OnDraw(CDC* pDC)
{
// 绘制多边形
CPoint pts[4];
pts[0] = CPoint(100, 100);
pts[1] = CPoint(200, 100);
pts[2] = CPoint(200, 200);
pts[3] = CPoint(100, 200);
pDC->Polygon(pts, 4);
// 平移变换
pDC->OffsetViewportOrg(100, 100);
// 缩放变换
pDC->ScaleViewportExt(2, 2, 1, 1);
// 旋转变换
pDC->SetViewportOrg(0, 0);
pDC->SetViewportExt(300, 300);
pDC->SetWindowOrg(150, 150);
pDC->SetWindowExt(300, 300);
pDC->SetViewportOrg(150, 150);
pDC->SetViewportExt(300, 300);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(150, 150);
pDC->SetViewportExt(300, 300);
pDC->SetWindowOrg(150, 150);
pDC->SetWindowExt(300, 300);
pDC->SetViewportOrg(150, 150);
pDC->SetViewportExt(300, 300);
pDC->RotateViewport(45);
// 反射变换
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(0, 0);
pDC->SetViewportExt(300, 300);
pDC->SetWindowOrg(150, 150);
pDC->SetWindowExt(-300, 300);
// 错切变换
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(0, 0);
pDC->SetViewportExt(300, 300);
pDC->SetWindowOrg(150, 150);
pDC->SetWindowExt(300, 300);
pDC->SetViewportOrg(150, 150);
pDC->SetViewportExt(300, 300);
pDC->ModifyWorldTransform(&XFORM{ 1, 0, 1, 1, 0, 0 });
}
```
在上面的代码中,首先使用`Polygon`函数绘制了一个四边形。接下来依次进行了平移、缩放、旋转、反射和错切等几何变换。其中,平移变换使用了`OffsetViewportOrg`函数;缩放变换使用了`ScaleViewportExt`函数;旋转变换使用了`RotateViewport`函数;反射变换使用了`SetWindowExt`函数;错切变换使用了`ModifyWorldTransform`函数。
需要注意的是,在代码中进行旋转、反射和错切变换时,需要先对视口、窗口和地图模式进行一些设置,以确保变换的正确性。
阅读全文