以这段程序为例#include<afxwin.h>
#include<afxext.h>
class CMainApp:public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMainWnd:public CFrameWnd
{
public:
void Draw(CDC* pDC);
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP();
};
BEGIN_MESSAGE_MAP(CMainWnd,CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
void CMainWnd::Draw(CDC *pDC)
{

POINT p[20];
p[0].x=20;
p[0].y=20;
int i;
for(i=1;i<20;i++)
{
p[i].x=p[i-1].x+10;
p[i].y=20;
}
for(i=0;i<15;i++)
{
CPen pen;
pen.CreatePen(PS_INSIDEFRAME,1,RGB(255,0,0));  
pDC->SelectObject(&pen);
CBrush cbrush;
cbrush.CreateSolidBrush(RGB(255,0,0));     
pDC->SelectObject(&cbrush);
pDC->Ellipse(p[i].x-5,p[i].y-5,p[i].x+5,p[i].y+5);   
} }
void CMainWnd::OnPaint()
{
CPaintDC dc(this);
Draw(&dc); 
CFrameWnd::OnPaint();
}
BOOL CMainApp::InitInstance()
{
CMainWnd *pFrame=new CMainWnd;
pFrame->Create(0," ",WS_OVERLAPPEDWINDOW,CRect(0,0,500,500));
this->m_pMainWnd=pFrame;
pFrame->ShowWindow(m_nCmdShow);
pFrame->UpdateWindow();
return TRUE;
}
CMainApp MyApp;
以上程序中画了若干个圆,我想让这些圆动态显示出来,就是可以让人观察到圆一个接一个出现的过程,这该怎么处理?

解决方案 »

  1.   

    看到MFC头都大了,要逐步显示在Draw()函数中不要使用for循环
    也就是说每一帧执行一次pDC->Ellipse(p[i].x-5,p[i].y-5,p[i].x+5,p[i].y+5);  
    做一个定时器。
      

  2.   

    谢谢您啊...我最近刚开始学VC,很多地方都不懂,我需要模拟扩散过程,如果不用循环似乎难以实现呢,您能说下用Draw()函数具体怎么操作吗?用循环没办法实现吗?
      

  3.   

    用sleep()具体怎么做啊?谢谢您啊!
      

  4.   

    谢谢您啊...我最近刚开始学VC,很多地方都不懂,我需要模拟扩散过程,如果不用循环似乎难以实现呢,您能说下用Draw()函数具体怎么操作吗?用循环没办法实现吗?
      

  5.   

    ptcenter.x
    ptcenter.y
    r将以上3个值定义为全局变量,或类的变量增加定时器在定时器中修改这3个值,就可以逐步显示了,如果需要在ONDRAW中一起显示则在每个圆的绘制完成后sleep(1000);也可以。
      

  6.   

    可以用setrop2(R2_NOTXORPEN) 先对前一次的绘图进行擦除,在对本次的绘图进行绘制  可以实现随鼠标移动 放大缩小哦。