我要实现的功能很简单,在基于对话框中的一个MFC程序中放上一个控件。在对话框初始化时加载上图片,然后实现在图片上画动态图,我使用双缓冲防止屏幕闪动
谢大家,我按照大家教我的方法做了做。想避免屏幕闪动,使用了双缓冲,代码如下:
void CHE2Dlg::OnPaint() 
{
         CDC* pMem=new CDC;    
        CBitmap* pBmp=new CBitmap;
        CBitmap* pOldBmp;
        CWnd *pWnd = GetDlgItem(IDC_PIC);//IDC_PIC为PICTRUE控件,我在对话框初始话时装载了图片
        CDC *pDC =pWnd->GetDC();
         pMem->CreateCompatibleDC(pDC);
        pBmp->CreateCompatibleBitmap(pDC, 512, 512);
        pOldBmp=pMem->SelectObject(pBmp);
        CBrush brBlue(RGB(0,0,255));
        CPen penBlue(PS_SOLID,1,RGB(255,0,0));
        pMem->SelectObject(brBlue);
        pMem->SelectObject(penBlue);
       pMem->Rectangle(temp.x-4,temp.y-4,temp.x+4,temp.y+4);
       pDC->BitBlt(0,0,512,512,pMem,0,0,SRCCOPY); 
       pMem->SelectObject(pOldBmp);
        pBmp->DeleteObject() ;
        pMem->DeleteDC();
        temp.y+=1;
        tempory=temp;//每刷新一次矩形向下移动一次
}
出现了以下问题
1:我原意是要绘图在IDC_PIC导入的图片上的,可现在发现画的矩形被图片遮盖了
2. 我只想要在IDC_PIC控件处,也就是图片上绘图更新,现在发现,在IDC_PIC外的背景变为透明了,狂晕!
现在不知道该如何处理了??????????为什么会这样啊
希望大家给我点意见,有源码就好

解决方案 »

  1.   

    呵呵,简单点说,你应该派生一个IDC_PIC相关联的子类。然后处理这个子类的onpaint。1 矩形被覆盖问题:你在对话框中对IDC_PIC绘制了矩形。之后,IDC_PIC自己的OnPaint会重绘装载的图片。所以你画的矩形被覆盖。2 IDC_PIC外的背景问题:你重载的是对话框的OnPaint,但是你并没有进行对话框的绘制工作。
      

  2.   

    可是我重载了这个类后ONPAINT函数画矩形时不是一样会重绘图片吗,还有这个新建的类怎么被被对话框调用
      

  3.   

    可是我重载了这个类后ONPAINT函数画矩形时不是一样会重绘图片吗,还有这个新建的类怎么被被对话框调用对话框上的控件也是窗口,重绘的时候会把无效区域内所有的窗口都绘制一遍。