MFC绘图基础一使用用户自定义映射模式,设置窗口大小和视区大小相等的二维坐标系。视区中x轴水平向右为正,y轴垂直向上为正,原点位于客户区中心;并绘制透明画刷填充的矩形,并在矩形内绘制一个红色阴影填充的正方形,以客户区正中心为对称点的对称的蓝色实体填充的正方形。
时间: 2024-09-26 15:15:54 浏览: 40
MFC(Microsoft Foundation Classes)是微软为其Windows应用程序提供的一种图形用户界面(GUI)工具包。在MFC中,你可以通过`CDC`(Device Context)来创建和管理绘图操作。用户自定义映射模式通常用于改变坐标系统的表示方式,如将窗口大小与视区大小保持一致。
首先,你需要获取`CDC`实例,然后设置`DC`的映射模式,比如`MM_TEXT`或`MM_TWIPS`,使得x轴从左到右增大,y轴从上到下增大,且原点位于客户区(窗口可见部分)的中心位置。
以下是一个简单的步骤示例:
1. **创建DC**:
```cpp
CClientDC dc(this); // 获取客户端DC,代表窗口
CDC memdc; // 创建内存DC,用于保存临时图像
```
2. **设置映射模式**:
```cpp
memdc.SelectObject(&dc); // 将内存DC绑定到窗口DC
memdc.SetMapMode(MM_TWIPS); // 设置毫米制映射模式
memdc.SetWindowExt(clientWidth, clientHeight); // 设置窗口大小
memdc.SetViewportExt(viewportWidth, viewportHeight); // 设置视口大小等于窗口大小
memdc.SetOrigin(clientWidth / 2, clientHeight / 2); // 设定原点在客户区中心
```
3. **绘制透明矩形、红色阴影正方形和对称蓝色正方形**:
```cpp
CRect rect(0, 0, viewportWidth, viewportHeight); // 定义矩形区域
memdc.FillRect(rect, CBrush(RGB(255, 255, 255, 128))); // 透明画刷填充矩形(半透明白色)
// 绘制红色阴影正方形
CRect shadowRect(rect);
shadowRect.InflateRect(-2, -2); // 缩小一点作为阴影边框
memdc.FillRect(shadowRect, CBrush(RGB(255, 0, 0)));
// 对称蓝色正方形
CPoint centerPoint = memdc.GetWorldToScreenPoint(CPoint(viewportWidth / 2, viewportHeight / 2)); // 获取屏幕中心
CRect blueRect(centerPoint.x - rect.Width() / 2, centerPoint.y - rect.Height() / 2, centerPoint.x + rect.Width() / 2, centerPoint.y + rect.Height() / 2);
memdc.FillRect(blueRect, CBrush(RGB(0, 0, 255)));
// 刷新显示
memdc.BitBlt(hdc, 0, 0, clientWidth, clientHeight, &memdc, 0, 0, SRCCOPY); // 将内存DC的内容复制回窗口DC
```
阅读全文