.cpp文件部分关键代码
void CNewPlayImage::InitializeControlsL()
{
//定义路径
TFileName fileName(KMbmFileName);
iBmpFileName = fileName;
User::LeaveIfError(CompleteWithAppPath(iBmpFileName));
//new bmp*实例化
iLoadBmp1 = new(ELeave) CFbsBitmap();
iLoadBmp2 = new(ELeave) CFbsBitmap();
iLoadBmp3 = new(ELeave) CFbsBitmap();
iLoadBmp4 = new(ELeave) CFbsBitmap();
iLoadBmp5 = new(ELeave) CFbsBitmap();
iLoadBmp6 = new(ELeave) CFbsBitmap();
iLoadBmp7 = new(ELeave) CFbsBitmap();
ifakeBmp = new (ELeave) CFbsBitmap();
// ifakeBmp1 = new (ELeave) CFbsBitmap();
iLoadBmpDate=new(ELeave) CFbsBitmap();
//加载图片
User::LeaveIfError(iLoadBmp1->Load(iBmpFileName, EMbmDdplayerProgress1));
User::LeaveIfError(iLoadBmp2->Load(iBmpFileName, EMbmDdplayerProgress2));
User::LeaveIfError(iLoadBmp3->Load(iBmpFileName, EMbmDdplayerProgress3));
User::LeaveIfError(iLoadBmp4->Load(iBmpFileName, EMbmDdplayerProgress4));
User::LeaveIfError(iLoadBmp5->Load(iBmpFileName, EMbmDdplayerProgress5));
User::LeaveIfError(iLoadBmp6->Load(iBmpFileName, EMbmDdplayerProgress6));
User::LeaveIfError(iLoadBmp7->Load(iBmpFileName, EMbmDdplayerProgress7));
User::LeaveIfError(iLoadBmpDate->Load(iBmpFileName, EMbmDdplayerDataread));
User::LeaveIfError(ifakeBmp->Load(iBmpFileName, EMbmDdplayerFakewin));
//User::LeaveIfError(ifakeBmp1->Load(iBmpFileName, EMbmDdplayerFakewin1));
fbsBmp=new(ELeave) CFbsBitmap();//初始化离屏
fbsBmp->Create(iControlRect.Size(), EColor64K);
//创建画笔
fbsDevice=CFbsBitmapDevice::NewL(fbsBmp);//初始化绘图设备、绘图上下文
fbsDevice->CreateContext(fbsGc);
iCurrentBitmap = iLoadBmp1;//初始化图片指针
//启动定时器
iCMyTimer = CMyTimer::NewL(this);
iCMyTimer->StartL(300 * 1000);
}
/*****内存中画图******/
void CNewPlayImage::LodBmpFunction()
{
TRect rect;//获取整个窗体的大小
//分辨率适配
CWsScreenDevice* ws = CEikonEnv::Static()->ScreenDevice();
TSize screenSize = ws->SizeInPixels();
// if(screenSize.iWidth==240 && screenSize.iHeight==320)
// {
rect=Rect();
iCurrentBitmap1=ifakeBmp;
// }
// else if(screenSize.iWidth==320 && screenSize.iHeight==240)
// {
// rect=Rect();
// iCurrentBitmap1=ifakeBmp1;
// }
fbsGc->BitBlt(TPoint(0,0),iCurrentBitmap1);/**画背景图*/
TRect rect2(0,90,rect.iBr.iX,rect.iBr.iY-45);
TRgb b(0,0,0);
b.SetAlpha(150);
fbsGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
fbsGc->SetBrushColor(b);
fbsGc->DrawRect(rect2);
TRgb c(0,0,0);
c.SetAlpha(0);
fbsGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
fbsGc->SetBrushColor(c);
TInt width=rect2.iBr.iX/2-iCurrentBitmap->SizeInPixels().iWidth/2;//绘制的Point
TInt height=rect2.iBr.iY/2-iCurrentBitmap->SizeInPixels().iHeight/2+32;
TInt dateWidth=rect2.iBr.iX/2-iLoadBmpDate->SizeInPixels().iWidth/2;//字幕绘制的Point
TInt dateHeight=height+iLoadBmpDate->SizeInPixels().iHeight+20;
fbsGc->BitBltMasked(TPoint(width,height),iCurrentBitmap,rect,iCurrentBitmap,EFalse);//遮罩处理
fbsGc->BitBltMasked(TPoint(dateWidth,dateHeight),iLoadBmpDate,rect,iLoadBmpDate,EFalse);//字幕遮罩处理
DrawDeferred();
}
/**
* Draw container contents.
*/
void CNewPlayImage::Draw( const TRect& aRect ) const
{
CWindowGc& gc = SystemGc();
gc.Clear( aRect );
gc.BitBlt(TPoint(0,0),fbsBmp);
}
//在回调函数里面换图
void CNewPlayImage::TimeOut()
{
iCMyTimer->Cancel();
if(flag>=7)
flag=0;
switch(flag)//换图片
{
case 0:
iCurrentBitmap = iLoadBmp1 ;
break;
case 1:
iCurrentBitmap = iLoadBmp2 ;
break;
case 2:
iCurrentBitmap = iLoadBmp3 ;
break;
case 3:
iCurrentBitmap = iLoadBmp4 ;
break;
case 4:
iCurrentBitmap = iLoadBmp5 ;
break;
case 5:
iCurrentBitmap = iLoadBmp6 ;
break;
case 6:
iCurrentBitmap = iLoadBmp7 ;
break;
default :NULL;
}
//刷新
flag++;//下一张图片case
LodBmpFunction();
iCMyTimer->StartL(300 * 1000);//0.2秒 循环启动定时器
}