一个很简单的程序,我就是贴一个小球,然后做运动,刚开始一切正常,但是过了15秒左右,就回静止,然后移动整个窗口,回出现叠影.怎么回这样啊?

解决方案 »

  1.   

    那应该调用什么函数啊?
    而且连我的window的右击的popmenu回出现错误,怎么会影响我系统的程序
    我用的是clientdc,不可能和系统有联系啊
      

  2.   

    内存泄多了就这样了。把系统的GDI对象都弄丢了。
      

  3.   

    //CMainFrame
    CMainFrame::CMainFrame()
    { CString strWndClass=AfxRegisterWndClass(
    CS_DBLCLKS,
    AfxGetApp()->LoadStandardCursor(IDC_ARROW),
    (HBRUSH)(COLOR_3DFACE+0),
    AfxGetApp()->LoadStandardIcon(IDI_WINLOGO)
    );
    CreateEx(0,strWndClass,_T("BALLMOVEMENT"),WS_OVERLAPPED|WS_SYSMENU|WS_CAPTION|WS_MINIMIZEBOX,
     0,0,500,600,NULL,NULL);  
    // TODO: add member initialization code here

    }CMainFrame::~CMainFrame()
    {
    }//afx_msg void CMainFrame::OnPaint()
    //{for(int i=0;i<1;i++)
    //pball->CurveMovement();
    //pball->DrawBall(230,232);
    //}
     afx_msg void  CMainFrame::OnTimer(UINT nIDEvent)
    {
    pball->CurveMovement();
    pball1->CurveMovement();
    pball2->CurveMovement();
    CFrameWnd::OnTimer(nIDEvent);
    } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
     {
    if(CFrameWnd::OnCreate(lpCreateStruct)==-1)
     return -1;
     if(!SetTimer(1,2,NULL)){
     
    MessageBox(_T("edfdf"));
     
     return -1;
    }
     pball=new CBall(3,3,1,1);
     pball1=new CBall(4,4,200,34); 
     pball2=new CBall(2,2,43,345);
     
     return 0;
     }
    //ball.cpp
    CBall::CBall(int spx,int spy,int x1,int y1)
    { speedx=spx;
     speedy=spy;
     x=x1;
     y=y1;
     
    } void CBall::DrawBall(int xx,int yy)
    {xx=x+speedx;
     yy=y+speedy;
     if(xx<=0)
     {xx=0;
      speedx=-speedx;
     }
     if(xx+32>=490)
     {xx=490-32;
      speedx=-speedx;
     }
     if(yy+32>=575)
     {yy=575-32;
      speedy=-speedy;
     }
     if(yy<=0)
     {yy=0;
      speedy=-speedy;
     }
     
     CWnd *pframe=AfxGetApp()->m_pMainWnd;
     CClientDC dc(pframe);
     CDC *mdc=new CDC;
     CBitmap *bitmap=new CBitmap;
     CBitmap *bitmap1=new CBitmap;
     
     bitmap->m_hObject=(HBITMAP)::LoadImage(NULL,"ball.bmp",
         IMAGE_BITMAP,32,32,LR_LOADFROMFILE);
     bitmap1->m_hObject=(HBITMAP)::LoadImage(NULL,"ball1.bmp",
     IMAGE_BITMAP,32,32,LR_LOADFROMFILE);
     
     
     //if(bitmap->m_hObject==NULL)
    // {dc.SetTextColor(RGB(0,0,255));
     // dc.TextOut(30,60,"dsfdsfsdf");
     //}
     
     
    mdc->CreateCompatibleDC(&dc);
     mdc->SelectObject(bitmap1);
    dc.BitBlt(x,y,32,32,mdc,0,0,SRCCOPY);
     
     mdc->SelectObject(bitmap);
     dc.BitBlt(xx,yy,32,32,mdc,0,0,SRCCOPY);
     this->x=xx;
     this->y=yy;}
     void CBall::CurveMovement()
     {
     
    DrawBall(x,y);
     }帮忙看一看
      

  4.   

    也许是存放小求位置的变量没有更新,重载onupdate()
      

  5.   

    mdc没有释放。造成内存泄漏。
    还有Select新的Object后一定记得还原为原来的Object。bitmap#没有释放
    如果使用指针,一定记得释放阿改后看看吧!