我在VC中使用GDI+绘图时,遇到以下难题,当主对话框窗口移过程序的另外一个应用程序窗口时,应用程序窗口中的图片不能及时的刷新,会留下一点空白,如下图所示这是没有移过窗口时的图
这是移过窗口时的图
以下是我绘图的代码    Image BackgroundPicture(m_strPicturePath);
    Bitmap * buf=new Bitmap(recLedPlayWnd.Width(),recLedPlayWnd.Height());
    Graphics graphics(buf);
    Rect rectGraphics(0,0,recLedPlayWnd.Width(),recLedPlayWnd.Height());
    graphics.DrawImage(&BackgroundPicture,rectGraphics);    Graphics gc(dc.m_hDC);
    gc.DrawImage(buf,0,0);
    delete buf;
    gc.ReleaseHDC(dc.m_hDC);    求高人指教...

解决方案 »

  1.   

    OnEreasBkgnd处理了么
    另外
    桌面不错
      

  2.   

    被侵袭的那个窗体,就是那个苹果。
    BOOL CMainFrame::OnEraseBkgnd(CDC* pDC)
    return FALSE;
      

  3.   

    在OnEreasebkgnd,我直接返回TRUE的话,在显示比较大的高清图片时会出现停顿现象
      

  4.   

    去掉最后一句:
    gc.ReleaseHDC(dc.m_hDC);//它是对应Graphics的GetHdc成员函数的
    另外,你最后有没有那句CDialog::OnPaint();?
    有的话,也去掉~~
      

  5.   

    卡是因为你每次都Bitmap * buf=new Bitmap(recLedPlayWnd.Width(),recLedPlayWnd.Height());
    当然卡,把它搞成成员变量或用GDI
      

  6.   


    谢谢,不过设置成为成员变量后,还是一样的,我是看GDI+要方便
      

  7.   

    我觉得是你绘图机制有问题
    绘图代码你是在OnPaint中调用的么
      

  8.   


    是的,我是在OnPaint()中调用的,这个有问题吗?
      

  9.   

    Image BackgroundPicture(m_strPicturePath);
    这个对象不用每次绘图时都建立,做成成员变量可以提高效率。
      

  10.   

    LedMultiMediaPlayer和你显示图象的窗口是一个程序吗?
    是的话,检查一下显示图象的窗口的CLIPCHILDREN和CLIPSIBLINGS属性。
      

  11.   


    是一个程序,请问这两个属性具体是做什么用的,应该设置为TRUE还是FALSE
      

  12.   

    没有触发WM_PAINT消息,却能触发WM_ERASEBKGND,希望不是哪里消息阻塞了...贴个完整的OnPaint()函数看看先...
      

  13.   

    谢谢各位,已经解决了,应该把graphics放在成员变量里面,还有graphics.DrawImage也不要在绘图函数调用,先在外面把图像绘制到内存中,然后再绘图的时候就不会有这种卡的现象了
      

  14.   

    楼主的解决办法是好的,但是不够灵活,当界面需要不断的变化时候(比如用户的点击导致按钮数量的变化,而按钮也不是控件,也是自己画的,控件按钮当然没问题,它自己管理),这个办法就不好用了。一句话,GetForeWindow可以解决问题,