15,980
社区成员




用VS中的MFC绘制摇摆的分形树,实现方法是定义IFSCode(CDC *pDC,double k)函数绘制图形,然后利用双缓存技术和定义定时器实现摇摆。
双缓冲函数定义如下:
void CTestView::DoubleBuffer()
{
CDC memdc,picture;
CDC *pDC;
CBitmap mem_bmp;
pDC = GetDC();
memdc.CreateCompatibleDC(pDC);
CBitmap NewBitmap,*OldBitmap;
NewBitmap.LoadBitmap(IDB_BITMAP2);
OldBitmap = memdc.SelectObject(&NewBitmap);
memdc.BitBlt(0,0,MaxX,MaxY,&picture,0,0,SRCCOPY);
memdc.SelectObject(&mem_bmp);
if (m_dir)
{
IFSCode(&memdc,k+=0.1);
if (k>=2) m_dir = FALSE;
}
else
{
IFSCode(&memdc,k-=0.1);
if (k<=-2) m_dir = TRUE;
}
pDC->BitBlt(0,0,MaxX,MaxY,&memdc,0,0,SRCCOPY);
ReleaseDC(pDC);
memdc.SelectObject(OldBitmap);
NewBitmap.DeleteObject();
memdc.DeleteDC();
}
菜单函数定义如下:
void CTestView::OnMENUMaple()
{
// TODO: Add your command handler code here
AfxGetMainWnd()->SetWindowText("IFS模型:蕨叶");
RedrawWindow();
GetMaxX();GetMaxY();
SetTimer(1, 500, NULL);
}
定时器函数定义如下:
void CTestView::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
DoubleBuffer();
CView::OnTimer(nIDEvent);
}
但是运行后动画不连续而且图像重叠,要怎么解决啊5555