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();
麻烦大家看看 我哪里写错了 谢谢啊!
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();
麻烦大家看看 我哪里写错了 谢谢啊!
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一定要连续。
谢谢您的回答,我按照您说的写了 有报错,是不是我初始化的地方不对呀。
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;
}
顺便我想问下 一般都在哪里初始化呢?小弟不懂,看视频讲解的时候 ,都说那里初始化,但是我自己写的时候就不明白了
CBitmap bitmap;
CBitmap bitmap[6]; 我在这里初始化的
============
你也改一下啊,我上面的CBitmap bitmap[6];是随手写的,你上面已经有了CBitmap bitmap;了,再定义CBitmap bitmap[6];当然会报重名错误了。你自己改个变量名不就行了。
==============
对于对话框程序一般是在OnInitDialog里面初始化,如果是普通窗口程序,一般处理WM_CREATE消息时初始化。
===========
连续播放当然要用定时器了,我上面的代码只是加载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;