⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mymedia.c

📁 手机开发环境BREW实例
💻 C
📖 第 1 页 / 共 2 页
字号:
      return;

   if (bCenter)
   {
      x = pRect->x + (pRect->dx / 2) - (ii.cxFrame / 2);
      y = pRect->y + (pRect->dy / 2) - (ii.cy / 2);
   }
   else
   {
      x = pRect->x;
      y = pRect->y;
   }

   IIMAGE_Start(pImage, x, y);
}


static char * MP_GetFileName(const char * psz)
{
   char *   pszName = STRRCHR(psz, (int)DIRECTORY_CHAR);

   if (pszName)
      pszName++;
   else
      pszName = (char *)psz;

   return pszName;
}

static void MP_FitStaticText(IDisplay * pd, IStatic * ps, AEEFont font, AECHAR * pszText)
{
   int      nFits;
   AEERect  rect;
   int      nLen = WSTRLEN(pszText);
   AECHAR   chSave = (AECHAR)0;

   ISTATIC_GetRect(ps, &rect);
   IDISPLAY_MeasureTextEx(pd, font, pszText, -1, rect.dx,  &nFits);
   if (nFits < nLen)
   {
      chSave = pszText[nFits];
      pszText[nFits] = (AECHAR)0;
   }
   ISTATIC_SetText(ps, NULL, pszText, AEE_FONT_NORMAL, font);
   if (nFits < nLen)
      pszText[nFits] = chSave;
}

static void MP_FrameRect(IDisplay * pd, AEERect * pRect)
{
   RGBVAL   clr = IDISPLAY_SetColor(pd, CLR_USER_FRAME, CLR_SYS_DK_SHADOW);
   IDISPLAY_FrameRect(pd, pRect);
   IDISPLAY_SetColor(pd, CLR_USER_FRAME, clr);
}

static void CPlayerWin_UpdateProgCtl(CPlayerWin * pme, int nCmd, int nSubCmd, uint16 wResID)
{
   char     sz[32];
   AECHAR   szBuf[32];


   if (pme->m_bProgTimer)
      return;

   if ( !ISHELL_LoadResString(pme->a.m_pIShell, MEDIA_RES_FILE, wResID, pme->m_szText, sizeof(pme->m_szText)))
      pme->m_szText[0] = (AECHAR)0;

   if (nCmd == MM_CMD_PLAY || nCmd == MM_CMD_RECORD)
   {
      SPRINTF(sz, " %02d:%02d/%02d:%02d", pme->m_dwPlayPos/60, pme->m_dwPlayPos%60, pme->m_dwTotalTime/60, pme->m_dwTotalTime%60);
      STRTOWSTR(sz, szBuf, sizeof(szBuf));
      WSTRCAT(pme->m_szText, szBuf);

      if (pme->m_dwTotalTime)
         pme->m_wPct = (uint16)((100 * pme->m_dwPlayPos) / pme->m_dwTotalTime);
   }
   else if (nCmd == MM_CMD_GETTOTALTIME)
   {
      SPRINTF(sz, " %02d:%02d/%02d:%02d", pme->m_dwPlayPos/60, pme->m_dwPlayPos%60, pme->m_dwTotalTime/60, pme->m_dwTotalTime%60);
      STRTOWSTR(sz, szBuf, sizeof(szBuf));
      WSTRCAT(pme->m_szText, szBuf);
   }
   else if (nCmd == MM_CMD_GETMEDIAPARM && nSubCmd == MM_PARM_VOLUME)
   {
      SPRINTF(sz, "[%u]", pme->m_wVolume);
      STRTOWSTR(sz, szBuf, sizeof(szBuf));
      WSTRCAT(pme->m_szText, szBuf);
      pme->m_wPct = (100 * pme->m_wVolume) / AEE_MAX_VOLUME;
   }
   else
   {
      pme->m_wPct = 0;
   }

   CProgCtl_SetPos(&pme->m_ProgCtl, pme->m_szText, pme->m_wPct);

   IDISPLAY_Update(pme->a.m_pIDisplay);
}

static void CProgCtl_SetPos(CProgCtl * pme, AECHAR * psz, uint16 wPct)
{
   MP_FitStaticText(pme->m_pIDisplay, pme->m_pTitle, AEE_FONT_NORMAL, psz);
   ISTATIC_Redraw(pme->m_pTitle);
   CProgCtl_DrawHist(pme, wPct);
   MP_FrameRect(pme->m_pIDisplay, &pme->m_rectMain);
}

static void CProgCtl_DrawHist(CProgCtl * pme, uint16 wPct)
{
   AEERect  rc;

   MEMCPY(&rc, &pme->m_rectBar, sizeof(AEERect));

   if(wPct > 100)
      wPct = 100;

   IDISPLAY_DrawFrame(pme->m_pIDisplay, &rc, AEE_FT_RAISED, CLR_SYS_SCROLLBAR);
   rc.dx = (rc.dx * wPct) / 100;
   IDISPLAY_FillRect(pme->m_pIDisplay, &rc, MP_CLR_PROG_FILL);
}


/*===========================================================================

FUNCTION Media_HandleEvent

DESCRIPTION
	This is the EventHandler for this app. All events to this app are handled in this
	function. All APPs must supply an Event Handler.

PROTOTYPE:
	boolean Media_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)

PARAMETERS:
	pi: Pointer to the AEEApplet structure. This structure contains information specific
	to this applet. It was initialized during the AEEClsCreateInstance() function.

	ecode: Specifies the Event sent to this applet

   wParam, dwParam: Event specific data.

DEPENDENCIES
  none

RETURN VALUE
  TRUE: If the app has processed the event
  FALSE: If the app did not process the event

SIDE EFFECTS
  none
===========================================================================*/
static boolean MyMedia_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{  
	CPlayerWin * pme = (CPlayerWin *)pi;
   switch (eCode) 
	{
      case EVT_APP_START:                        
		    
		    // Add your code here .....
		  AutoImage_DrawSplash(pme);

      		return(TRUE);
      case EVT_APP_STOP:

		    // Add your code here .....

         return TRUE;
	 case EVT_KEY:	            // Process key event
     case EVT_COMMAND:          // Process menu command event
     case EVT_CREATEMEDIA:      // Create media
     case EVT_COPYRIGHT_END:    // Copyright dialog ended
         return CPlayerWin_HandleEvent(pme, eCode, wParam, dwParam);
      default:
         break;
   }
   return FALSE;
}

static boolean CPlayerWin_HandleEvent(CPlayerWin * po, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
   CPlayerWin *   pme = po;
   boolean        bRet = TRUE;


   if (MP_ISEVTKEY(eCode))
   {
		return IMENUCTL_HandleEvent(pme->m_pPlayerMenu, eCode, wParam, dwParam);
   }
   // Process create media events...
   if (eCode == EVT_CREATEMEDIA )
   {
      AEEMediaUtil_CreateMedia(pme->a.m_pIShell, &pme->m_md, &pme->m_pMedia);
      
      IMEDIA_RegisterNotify(pme->m_pMedia, CPlayerWin_MediaNotify, pme);
 //        MP_ErrorDlg(pme->m_pOwner, IDS_ERR_MEDIA);
     
      return TRUE;
   }

   // If this event is not EVT_COMMAND, then return...
   if (!MP_ISEVTCMD(eCode))
      return FALSE;

   
   // Process EVT_COMMAND...
   switch (wParam)
   {
      case IDM_PM_PLAY:
         if (CPlayerWin_IsPause(pme))
            IMEDIA_Resume(pme->m_pMedia);
         else if (SUCCESS != IMEDIA_GetTotalTime(pme->m_pMedia))
         {
            if (AEE_SUCCESS == IMEDIA_Play(pme->m_pMedia))
               pme->m_bPlayRec = TRUE;
         }
         break;

      
      case IDM_PM_STOP:
         IMEDIA_Stop(pme->m_pMedia);
         break;

      case IDM_PM_REWIND:
         IMEDIA_Rewind(pme->m_pMedia, MP_SEEK_TIME);
         break;

      case IDM_PM_FF:
         IMEDIA_FastForward(pme->m_pMedia, MP_SEEK_TIME);
         break;

      case IDM_PM_PAUSE:
         if (CPlayerWin_IsPause(pme))
            IMEDIA_Resume(pme->m_pMedia);
         else 
            IMEDIA_Pause(pme->m_pMedia);
         break;

      case IDM_PM_UP:
      {

         uint16   wVol = pme->m_wVolume + MP_VOLUME_STEP;
         wVol = (wVol > AEE_MAX_VOLUME) ? AEE_MAX_VOLUME : wVol;
         IMEDIA_SetVolume(pme->m_pMedia, wVol);
         break;
      }

      case IDM_PM_DOWN:
      {
         int16    nVol = (int16)pme->m_wVolume - MP_VOLUME_STEP;
         nVol = (nVol < 0) ? 0 : nVol;
         IMEDIA_SetVolume(pme->m_pMedia, (uint16)nVol);
         break;
      }

     
      default:
         bRet = FALSE;
         break;
   }

   return bRet;
}

static boolean CPlayerWin_IsPause(CPlayerWin * pme)
{
   boolean  bChg;
   int      nState = IMEDIA_GetState(pme->m_pMedia, &bChg);

   if (bChg)
      return FALSE;

   return (nState == MM_STATE_PLAY_PAUSE || nState == MM_STATE_RECORD_PAUSE);
}

static void CPlayerWin_MediaNotify(void * pUser, AEEMediaCmdNotify * pCmdNotify)
{
   CPlayerWin *   pme = (CPlayerWin *)pUser;
   uint16         nTextID = 0;

   switch (pCmdNotify->nStatus)
   {
      case MM_STATUS_SEEK_FAIL:
      case MM_STATUS_PAUSE_FAIL:
      case MM_STATUS_RESUME_FAIL:
         nTextID = IDS_ERR_PLAYCTL_CMD;
         break;
   }

   if (pCmdNotify->nCmd == MM_CMD_PLAY || pCmdNotify->nCmd == MM_CMD_RECORD)  // IMEDIA_Play/IMEDIA_Record events
   { 
      if(pCmdNotify->nCmd == MM_CMD_PLAY)
		  nTextID = IDS_PLAY;
      switch (pCmdNotify->nStatus)
      {
         case MM_STATUS_START://开始播放
            IMENUCTL_SetSel(pme->m_pPlayerMenu, IDM_PM_STOP);
            break;

         case MM_STATUS_MEDIA_SPEC://IMediaMIDI类型
             break;

         case MM_STATUS_TICK_UPDATE:
            pme->m_dwPlayPos++;
            if (!pme->m_dwTotalTime)
               pme->m_wPct = (pme->m_wPct + 20) % 100;
            break; 

         case MM_STATUS_SEEK://查找
            nTextID = IDS_SEEK;
            if (pCmdNotify->dwSize)
               pme->m_dwPlayPos = (uint32)pCmdNotify->pCmdData / 1000;
            break;

         case MM_STATUS_PAUSE://暂停
            nTextID = IDS_PAUSE;
            if (pCmdNotify->dwSize)
               pme->m_dwPlayPos = (uint32)pCmdNotify->pCmdData / 1000;
            break;

         case MM_STATUS_RESUME://恢复
            if (pCmdNotify->dwSize)
               pme->m_dwPlayPos = (uint32)pCmdNotify->pCmdData / 1000;
            break;

         case MM_STATUS_DONE:    //回放
         case MM_STATUS_ABORT:   //回放忽略
         {
            if(pCmdNotify->nStatus == MM_STATUS_DONE)
				nTextID = IDS_STOP;
            pme->m_bPlayRec = FALSE;
            pme->m_dwPlayPos = 0;
            pme->m_wPct = 0;

            IMENUCTL_SetSel(pme->m_pPlayerMenu, IDM_PM_PLAY);
            AutoImage_Redraw(pme, TRUE);           
            break;
         }
      }

      CPlayerWin_UpdateProgCtl(pme, pCmdNotify->nCmd, pCmdNotify->nSubCmd, nTextID);
   } // MM_CMD_PLAY
   else if (pCmdNotify->nCmd == MM_CMD_GETTOTALTIME)
   {
      if (pCmdNotify->nStatus == MM_STATUS_DONE || pCmdNotify->nStatus == MM_STATUS_ABORT)
      {
         pme->m_dwTotalTime = ((uint32)pCmdNotify->pCmdData) / 1000;
         if (AEE_SUCCESS == IMEDIA_Play(pme->m_pMedia))
            pme->m_bPlayRec = TRUE;
         CPlayerWin_UpdateProgCtl(pme, pCmdNotify->nCmd, pCmdNotify->nSubCmd, nTextID);
      }
   } // MM_CMD_GETTOTALTIME
   else if (pCmdNotify->nCmd == MM_CMD_SETMEDIAPARM)
   {
      if (pCmdNotify->nSubCmd == MM_PARM_VOLUME && pCmdNotify->nStatus == MM_STATUS_DONE)
      {
         IMEDIA_GetMediaParm(pme->m_pMedia, MM_PARM_VOLUME, NULL, NULL);
         return;
      }
   } // MM_CMD_SETMEDIAPARM
   else if (pCmdNotify->nCmd == MM_CMD_GETMEDIAPARM) // IMEDIA_GetMediaParm()事件
   {
      if (pCmdNotify->nSubCmd == MM_PARM_VOLUME && pCmdNotify->nStatus == MM_STATUS_DONE)
      {
         pme->m_wVolume = (uint16)(uint32)pCmdNotify->pCmdData;

         pme->m_bProgTimer = FALSE;
         CPlayerWin_UpdateProgCtl(pme, pCmdNotify->nCmd, pCmdNotify->nSubCmd, IDS_VOLUME);
         pme->m_bProgTimer = TRUE;
         // Set the prog timer so that the display stays for few seconds.
		 //设置进度条停止进度一段时间
         ISHELL_SetTimer(pme->a.m_pIShell, MP_PROG_TIMER, (PFNNOTIFY)CPlayerWin_ProgTimerNotify, pme);
      }
   }  // MM_CMD_GETMEDIAPARM
}

static void CPlayerWin_ProgTimerNotify(CPlayerWin * pme)
{
   pme->m_bProgTimer = FALSE;
   if (!pme->m_bPlayRec)
      AutoImage_Redraw(pme, TRUE);
}

static void AutoImage_DrawSplash(CPlayerWin * pme)
{
//	pme->m_bActive
   if (pme->m_bActive)
   {
		AutoImage_Redraw(pme, FALSE);
		CMediaPlayer_PlayFile(pme, pme->m_pszFile);
      return;
   }
   //从资源文件中装载图象并显示,同时,设置在一定时间内回调此函数。
   {
      IImage * pi = ISHELL_LoadResImage(pme->a.m_pIShell, MEDIA_RES_FILE, IDB_LOGO);

      if (pi)
      {
         AEERect  rect;

         IDISPLAY_ClearScreen(pme->a.m_pIDisplay);
         SETAEERECT(&rect, 0, 0, pme->m_cxWidth, pme->m_cyHeight);
         MP_DrawImage(pi, &rect, TRUE);
         IDISPLAY_Update(pme->a.m_pIDisplay);
         MP_RELEASEIF(pi);
      }

      pme->m_bActive = TRUE;
      ISHELL_SetTimer(pme->a.m_pIShell, MP_SPLASH_TIMER, (PFNNOTIFY)AutoImage_DrawSplash, pme);
   }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -