使用VC++6.0如何使用MFC编程,在窗口中一次绘制n=0~5的所有Cantor图
时间: 2023-06-19 12:07:26 浏览: 162
在VC++6.0中使用MFC编程,可以使用CDC类实现绘制。下面是一个示例程序,可以一次绘制0~5级的Cantor图:
```cpp
#include "stdafx.h"
#include "Cantor.h"
#include <vector>
#define MAX_LEVEL 5
using namespace std;
vector<CRect> rects;
Cantor::Cantor()
{
Create(NULL, _T("Cantor Set"), WS_OVERLAPPEDWINDOW, CRect(0, 0, 800, 600));
ShowWindow(SW_SHOW);
}
Cantor::~Cantor()
{
}
void Cantor::OnDraw(CDC* pDC)
{
for (int i = 0; i <= MAX_LEVEL; i++)
{
rects.clear();
DrawCantor(pDC, i, CRect(0, 0, 800, 600));
}
}
void Cantor::DrawCantor(CDC* pDC, int level, CRect rect)
{
if (level == 0)
{
rects.push_back(rect);
return;
}
int height = rect.Height() / 3;
CRect left(rect.left, rect.top, rect.right / 3, rect.top + height);
CRect right(rect.right * 2 / 3, rect.top, rect.right, rect.top + height);
DrawCantor(pDC, level - 1, left);
DrawCantor(pDC, level - 1, right);
for (int i = 0; i < rects.size(); i++)
{
pDC->FillSolidRect(rects[i], RGB(0, 0, 0));
}
}
BEGIN_MESSAGE_MAP(Cantor, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
void Cantor::OnPaint()
{
CPaintDC dc(this);
OnDraw(&dc);
}
```
在这个程序中,我们定义了一个Cantor类,并在其中重载了OnDraw和OnPaint方法。OnDraw方法用于绘制所有的Cantor图,而OnPaint方法则调用OnDraw方法进行绘制。
在DrawCantor方法中,我们使用递归的方式绘制Cantor图。对于每一级Cantor图,我们将其分成左右两个部分,并递归地绘制它们。当递归到最后一级时,我们将得到一个矩形列表rects,其中包含了所有需要绘制的矩形。我们遍历这个列表,使用FillSolidRect方法填充矩形,绘制出Cantor图。
在主函数中,我们创建了一个Cantor对象,并将其显示出来。这样就可以看到0~5级的Cantor图了。
阅读全文