在mfc中,有没有办法,通过crect类来定义一个平行四边形的区域
时间: 2023-05-26 18:02:34 浏览: 100
在MFC中,可以使用CPoint数组来定义一个平行四边形的区域。具体步骤如下:
1. 定义一个CPoint数组,包含四个顶点的坐标。
2. 将这个CPoint数组传递给CPen和CBrush对象的Create方法,创建一个宽度为1、颜色为黑色的线条和一个红色的填充画刷。
3. 在OnDraw方法中,调用CDC类的Polygon方法,将CPoint数组传递给它,绘制出平行四边形。
以下是示例代码:
```cpp
void CMyView::OnDraw(CDC* pDC)
{
CPoint pts[4];
pts[0] = CPoint(10, 10);
pts[1] = CPoint(110, 10);
pts[2] = CPoint(160, 80);
pts[3] = CPoint(60, 80);
CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
CBrush brush(RGB(255, 0, 0));
pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
brush.CreateSolidBrush(RGB(255, 0, 0));
pDC->SelectObject(&pen);
pDC->SelectObject(&brush);
pDC->Polygon(pts, 4);
}
```
相关问题
定义一个点类Point,包括x坐标和y坐标(int)。定义一个CRect类,代表一个矩形,要求CRect类中有代表矩形的左上角坐标(x1,y1)和右下角坐标(x2,y2)点类的对象,要求CRect类中有两个成员函数RectHeight()和RectWidth(),通过这两个函数能得到矩形的高和宽;此外还需要有求此矩形面积的成员函数。 要求每个类至少有两个以上构造函数,在main函数中测试他门的每一个成员函数。
以下是Point类和CRect类的完整代码:
```c++
#include <iostream>
using namespace std;
class Point {
public:
int x;
int y;
Point() {
x = 0;
y = 0;
}
Point(int x, int y) {
this->x = x;
this->y = y;
}
};
class CRect {
public:
Point p1;
Point p2;
CRect() {
p1 = Point(0, 0);
p2 = Point(0, 0);
}
CRect(Point p1, Point p2) {
this->p1 = p1;
this->p2 = p2;
}
CRect(int x1, int y1, int x2, int y2) {
p1 = Point(x1, y1);
p2 = Point(x2, y2);
}
int RectHeight() {
return abs(p2.y - p1.y);
}
int RectWidth() {
return abs(p2.x - p1.x);
}
int RectArea() {
return RectHeight() * RectWidth();
}
};
int main() {
Point p1(1, 2);
Point p2(3, 4);
CRect rect1(p1, p2);
CRect rect2(5, 6, 7, 8);
cout << "rect1 height: " << rect1.RectHeight() << endl;
cout << "rect1 width: " << rect1.RectWidth() << endl;
cout << "rect1 area: " << rect1.RectArea() << endl;
cout << "rect2 height: " << rect2.RectHeight() << endl;
cout << "rect2 width: " << rect2.RectWidth() << endl;
cout << "rect2 area: " << rect2.RectArea() << endl;
return 0;
}
```
在这个程序中,我们定义了一个Point类和一个CRect类。Point类包含x和y坐标,CRect类包含左上角和右下角的Point对象。CRect类还有RectHeight()、RectWidth()和RectArea()三个成员函数,分别用于计算矩形的高、宽和面积。
在main函数中,我们创建了两个CRect对象,并测试了每个对象的成员函数。
在MFC编程中,有16个Crect对象,以subrect[4][4]的数组形式存在,请为每个小区域设置一个标志位,未使用区域为1,使用过的区域为0
好的,可以通过以下代码完成您的要求:
```
// 初始化16个CRect对象
CRect subrect[4][4];
// 定义16个标志位,默认均为1,即未使用过
int flag[4][4] = {1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1};
// 遍历16个小区域
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
// 如果该小区域已经使用过,将其标志为0
if (used(subrect[i][j])) {
flag[i][j] = 0;
}
}
}
```
其中,used(subrect[i][j])是一个自定义函数,用于判断该小区域是否已经被使用过。
阅读全文