IPlay.c
资源名称:brewmine3.rar [点击查看]
上传用户:yulinhuamu
上传日期:2009-12-26
资源大小:7287k
文件大小:4k
源码类别:
BREW编程
开发平台:
Visual C++
- #include "IPlay.h"
- #include "Winmine.bid"
- #include "AEEAppGen.h"
- ////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////
- #define MOVE_STEP 10
- static void IMINEPLAY_TimerHdl(IMinePlay* pCtl);
- static void IMINEPLAY_InitImage(IMinePlay* pCtl);
- static void IMINEPLAY_FreeImage(IMinePlay* pCtl);
- static void IMINEPLAY_Draw(IMinePlay* pCtl,AEERect* rt);
- ////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////
- IMinePlay* IMINEPLAY_CreateInstance(AEERect *rt)
- {
- AEEApplet* pApp=(AEEApplet*)GETAPPINSTANCE();
- IMinePlay* p=NULL;
- IFileMgr* pMgr=NULL;
- TVedioElement* pName;
- FileInfo Info;
- if(NULL==rt||NULL==pApp) return NULL;
- p=MALLOCREC(IMinePlay);
- if(p)
- {
- p->m_rt=*rt;
- p->m_pImage=NULL;
- p->m_pIDisplay=pApp->m_pIDisplay;
- p->m_pIShell=pApp->m_pIShell;
- p->m_pNameList=NULL;
- p->m_ListSize=0;
- if (SUCCESS==ISHELL_CreateInstance(p->m_pIShell, AEECLSID_FILEMGR, (void **)&pMgr))
- {
- if(SUCCESS==IFILEMGR_EnumInit(pMgr,"image",FALSE))
- {
- while(IFILEMGR_EnumNext(pMgr, &Info))
- {
- pName=MALLOCREC(TVedioElement);
- if(pName)
- {
- pName->m_pData=STRDUP(Info.szName);
- pName->m_pNext=p->m_pNameList;
- p->m_pNameList=pName;
- p->m_ListSize++;
- }
- }
- }
- IFILEMGR_Release(pMgr);
- }
- }
- return p;
- }
- boolean IMINEPLAY_Release(IMinePlay* pCtl)
- {
- TVedioElement* p;
- if(pCtl)
- {
- IMINEPLAY_FreeImage(pCtl);
- p=pCtl->m_pNameList;
- while(p)
- {
- pCtl->m_pNameList=p->m_pNext;
- FREEIF(p->m_pData);
- FREE(p);
- p=pCtl->m_pNameList;
- }
- FREEIF(pCtl);
- }
- return TRUE;
- }
- boolean IMINEPLAY_Start(IMinePlay* pCtl)
- {
- if(!pCtl) return FALSE;
- IMINEPLAY_FreeImage(pCtl);
- IMINEPLAY_InitImage(pCtl);
- pCtl->m_ShowPoint=MOVE_STEP;
- IMINEPLAY_TimerHdl(pCtl);
- return TRUE;
- }
- boolean IMINEPLAY_Stop(IMinePlay* pCtl)
- {
- if(!pCtl) return FALSE;
- IMINEPLAY_FreeImage(pCtl);
- return TRUE;
- }
- ////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////
- static void IMINEPLAY_TimerHdl(IMinePlay* pCtl)
- {
- AEERect rt;
- int32 sec;
- pCtl->m_ShowPoint--;
- ISHELL_CancelTimer(pCtl->m_pIShell,(PFNNOTIFY) IMINEPLAY_TimerHdl, pCtl);
- if(pCtl->m_ShowPoint<0)
- {
- if(pCtl->m_pImage)
- {
- IIMAGE_Release(pCtl->m_pImage);
- pCtl->m_pImage=NULL;
- }
- ISHELL_PostEvent(pCtl->m_pIShell, AEECLSID_WINMINE, EVT_USER, CMD_RESTART, (uint32) 0);
- return;
- }
- rt.dx=pCtl->m_rt.dx*(MOVE_STEP-pCtl->m_ShowPoint)/MOVE_STEP;
- rt.dy=pCtl->m_rt.dy*(MOVE_STEP-pCtl->m_ShowPoint)/MOVE_STEP;
- rt.x=pCtl->m_rt.x+(pCtl->m_rt.dx-rt.dx)/2;
- rt.y=pCtl->m_rt.y+(pCtl->m_rt.dy-rt.dy)/2;
- IMINEPLAY_Draw(pCtl,&rt);
- sec=((0==pCtl->m_ShowPoint)?800:200);
- ISHELL_SetTimer(pCtl->m_pIShell,sec,(PFNNOTIFY) IMINEPLAY_TimerHdl, pCtl);
- }
- static void IMINEPLAY_InitImage(IMinePlay* pCtl)
- {
- char* pName=NULL;
- byte data;
- AEEImageInfo pi;
- TVedioElement* pp=pCtl->m_pNameList;
- if(1==pCtl->m_ListSize)
- pName=pp->m_pData;
- else if(pCtl->m_ListSize>1)
- {
- GETRAND(&data,1);
- data=pCtl->m_ListSize*data/256;
- while((data--)>0)
- pp=pp->m_pNext;
- pName=pp->m_pData;
- }
- if(pName)
- pCtl->m_pImage=ISHELL_LoadImage(pCtl->m_pIShell,pName);
- if(pCtl->m_pImage)
- {
- IIMAGE_GetInfo(pCtl->m_pImage,&pi);
- pCtl->m_Imagedx=pi.cx;
- pCtl->m_Imagedy=pi.cy;
- }
- }
- static void IMINEPLAY_FreeImage(IMinePlay* pCtl)
- {
- ISHELL_CancelTimer(pCtl->m_pIShell,(PFNNOTIFY)IMINEPLAY_TimerHdl, pCtl);
- if(pCtl->m_pImage)
- {
- IIMAGE_Release(pCtl->m_pImage);
- pCtl->m_pImage=NULL;
- }
- }
- static void IMINEPLAY_Draw(IMinePlay* pCtl,AEERect* rt)
- {
- AEERect rect;
- int offsetx=0;
- int offsety=0;
- int x=rt->x;
- int y=rt->y;
- int dx=rt->dx;
- int dy=rt->dy;
- if(!pCtl->m_pImage) return;
- if(pCtl->m_Imagedx<rt->dx)
- {
- dx=pCtl->m_Imagedx;
- x=rt->x+(rt->dx-pCtl->m_Imagedx)/2;
- }
- else
- offsetx=(pCtl->m_Imagedx-rt->dx)/2;
- if(pCtl->m_Imagedy<rt->dy)
- {
- dy=pCtl->m_Imagedy;
- y=rt->y+(rt->dy-pCtl->m_Imagedy)/2;
- }
- else
- offsety=(pCtl->m_Imagedy-rt->dy)/2;
- rect.x=x;
- rect.y=y;
- rect.dx=dx;
- rect.dy=dy;
- IIMAGE_SetParm(pCtl->m_pImage, IPARM_OFFSET,offsetx,offsety);
- IIMAGE_SetParm(pCtl->m_pImage, IPARM_SIZE,dx,dy);
- IIMAGE_Draw(pCtl->m_pImage,x,y);
- IDISPLAY_FrameRect(pCtl->m_pIDisplay,&rect);
- IDISPLAY_Update(pCtl->m_pIDisplay);
- }