CBitmap bitmap;
int i=0; switch( m_option )
{
default:
case -1:
return;
break;
case 1:
bitmap.LoadBitmap(IDB_BITMAP1);
break;
case 2:
bitmap.LoadBitmap(IDB_BITMAP2);
break;
case 3:
bitmap.LoadBitmap(IDB_BITMAP3);
break;
case 4:
bitmap.LoadBitmap(IDB_BITMAP4);
break;
case 5:
bitmap.LoadBitmap(IDB_BITMAP5);
break;
case 0:
bitmap.LoadBitmap(IDB_BITMAP6);
break;
case 6:
   for (i=0;i<5;i++)
   {
   bitmap.LoadBitmap(IDB_BITMAP1);
   bitmap.LoadBitmap(IDB_BITMAP2);
   bitmap.LoadBitmap(IDB_BITMAP3);
   bitmap.LoadBitmap(IDB_BITMAP4);
   bitmap.LoadBitmap(IDB_BITMAP5);
   bitmap.LoadBitmap(IDB_BITMAP6);
           break;
   }
         就是这里连续播放的时候不行,程序就崩溃,其他的CASE都对应播放一个图片都可以的,
                             case 6对应的是一次连续播放这6张,
  
 
  


} CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap* pOld = memDC.SelectObject(&bitmap); BITMAP bit;
bitmap.GetBitmap(&bit); dc.StretchBlt(m_rect.left,m_rect.top,
m_rect.Width(),m_rect.Height(),
&memDC,
0,0,
bit.bmWidth,bit.bmHeight,
SRCCOPY); memDC.SelectObject(pOld);
bitmap.DeleteObject();
memDC.DeleteDC();
麻烦大家看看 我哪里写错了  谢谢啊!

解决方案 »

  1.   

    你的case 6里面重新加载了6次bitmap,并不是循环播放,只有IDB_BITMAP6被播放出来了可以用一个bitmap数组,在程序初始化的时候全部加载好,需要显示谁的时候选入memdc然后贴到dc就行了连续播放要设定一个定时器,比如间隔200ms循环播放下一个图片
      

  2.   

    你那个bitmap 多次加载位图是不行的,必须先释放掉才能第二次加载
      

  3.   

    就是这里连续播放的时候不行,程序就崩溃,其他的CASE都对应播放一个图片都可以的,
    case 6对应的是一次连续播放这6张
    ==========
    你用一个CBitmap怎么行呢?
    定义一个CBitmap数组:CBitmap bitmap[6];
    case 6:
    for (i=0;i<5;i++)
    {
    bitmap[i].LoadBitmap(IDB_BITMAP1+i);
    }
    break;
    有个要求,就是IDB_BITMAP1到IDB_BITMAP6一定要连续。
      

  4.   


    谢谢您的回答,我按照您说的写了 有报错,是不是我初始化的地方不对呀。
              CBitmap bitmap;
    CBitmap bitmap[6];  我在这里初始化的
    int i=0;

    switch( m_option )
    {
    default:
    case -1:
    return;
    break;
    case 1:
    bitmap.LoadBitmap(IDB_BITMAP1);
    break;
    case 2:
    bitmap.LoadBitmap(IDB_BITMAP2);
    break;
    case 3:
    bitmap.LoadBitmap(IDB_BITMAP3);
    break;
    case 4:
    bitmap.LoadBitmap(IDB_BITMAP4);
    break;
    case 5:
    bitmap.LoadBitmap(IDB_BITMAP5);
    break;
    case 0:
    bitmap.LoadBitmap(IDB_BITMAP6);
    break;
    case 6:
    for (i=0;i<5;i++)
    {
    bitmap[i].LoadBitmap(IDB_BITMAP1+i);


    }
    break;
    }
    顺便我想问下  一般都在哪里初始化呢?小弟不懂,看视频讲解的时候 ,都说那里初始化,但是我自己写的时候就不明白了
      

  5.   

    谢谢您的回答,我按照您说的写了 有报错,是不是我初始化的地方不对呀。
      CBitmap bitmap;
    CBitmap bitmap[6]; 我在这里初始化的 
    ============
    你也改一下啊,我上面的CBitmap bitmap[6];是随手写的,你上面已经有了CBitmap bitmap;了,再定义CBitmap bitmap[6];当然会报重名错误了。你自己改个变量名不就行了。
      

  6.   

    顺便我想问下 一般都在哪里初始化呢?小弟不懂,看视频讲解的时候 ,都说那里初始化,但是我自己写的时候就不明白了
    ==============
    对于对话框程序一般是在OnInitDialog里面初始化,如果是普通窗口程序,一般处理WM_CREATE消息时初始化。
      

  7.   

    不过改好好,没有报错 点击连续播放的时候 程序也就崩溃了,是不是就是需要要定时器呀,大哥
    ===========
    连续播放当然要用定时器了,我上面的代码只是加载6个位图,你在定时器中隔一段时间显示一个位图。
    你可以定义一个static int i=0;
    在定时器中这样处理:
    CDC mdc;
    CClientDC dc(this);
    mdc.CreateCompatibleDC(dc);
    mdc.SelectObject(bitmap[i++]);
    dc.BitBlt(0,0,.....,mdc,0,0,SRCCOPY);
    if(i>=6) i=0;
      

  8.   

    同LS,定时器cout=cout++/图片数量;