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

📄 vdjapp.c

📁 这是我写一个完成的Brew小程序
💻 C
字号:
/* 
 * VideoDJ视频编辑主程序,主要包括VDJ applet的实例创建函数和事件处理函数
 * 创建人  : 张毅 
 * 创建时间: 2006-09-02
 */

//#include "AEEModGen.h"          // Module interface definitions
#include "AEEAppGen.h"          // Applet interface definitions
//#include "AEEShell.h"           // Shell interface definitions


//add by zhangyi begin
#include "AEEStdLib.h"
#include "AEEFile.h"
#include "AEEMenu.h"
#include "AEEImage.h"
#include "AEEImageCtl.h"

#include "VDJApp.bid"
#include "VDJApp_res.h"

#include "VDJApp.h"

//函数原型
boolean CVDJApp_HandleEvent(CVDJApp *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam);
boolean CVDJApp_SetWindow(CVDJApp * pme, WINID eWinID, uint32 dwParam);

void CVDJApp_Redraw(CVDJApp * pme, boolean bDefer);
void CVDJApp_RedrawNotify(CVDJApp * pme);

// CWindow 
IWindow *  CWindow_New(int16 nSize, CVDJApp *pVDJApp, VTBL(IWindow) * pvt);

void CVDJApp_FreeIF(IBase ** ppif);
void CVDJApp_FreeWin(IWindow ** ppif);

/*===========================================================================
   This function releases IBase.
===========================================================================*/
void CVDJApp_FreeIF(IBase ** ppif)
{
   if (ppif && *ppif)
   {
      IBASE_Release(*ppif);
      *ppif = NULL;
   }
}

/*===========================================================================
   This function releases IWindow.
===========================================================================*/
void CVDJApp_FreeWin(IWindow ** ppif)
{
   if (ppif && *ppif)
   {
      IWINDOW_Delete(*ppif);
      *ppif = NULL;
   }
}

IWindow * CWindow_New(int16 nSize, CVDJApp *pOwner, VTBL(IWindow) * pvt)
{
   CWindow        *pMe;
   VTBL(IWindow)  *pIWindowVtbl;

   pMe = MALLOC(nSize + sizeof(VTBL(IWindow)));
   if (!pMe)
      return NULL;
   
   pMe->m_pOwner = pOwner;
   pMe->m_pIShell = pOwner->a.m_pIShell;
   pMe->m_pIDisplay = pOwner->a.m_pIDisplay;

   pIWindowVtbl = (VTBL(IWindow) *)((byte *)pMe + nSize);
   MEMCPY(pIWindowVtbl, pvt, sizeof(VTBL(IWindow)));
   INIT_VTBL(pMe, IWindow, *pIWindowVtbl);

   return (IWindow *)pMe;
}


//把Log日志写入文件vdj.txt
static boolean CVDJApp_WriteLog(CVDJApp *pMe,AECHAR *pszText,char *pszFileName)
{
    IFileMgr *pFileMgr = NULL;
    IFile *pFile = NULL;

    JulianType julianDate;
    uint16 year, month, day,hour,minute,second; 

    AECHAR szLog[300] = {0};

    AECHAR szLogTime[128]={0};

    GETJULIANDATE(0, &julianDate); 

    year = julianDate.wYear;
    month = julianDate.wMonth;
    day = julianDate.wDay; 
    hour = julianDate.wHour;
    minute = julianDate.wMinute;
    second = julianDate.wSecond;

    if (ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_FILEMGR, (void**)(&pFileMgr)) != SUCCESS )
    {
        return FALSE;
    }
    
    //如果文件不存在
    if(EFAILED==IFILEMGR_Test(pFileMgr,"vdj.txt"))
    {
        pFile = IFILEMGR_OpenFile(pFileMgr,"vdj.txt",_OFM_CREATE);
    }
    //如果文件存在则在文件尾部追加
    else
    {
        //IFILEMGR_Remove(pFileMgr,"davidlove.txt");
        pFile = IFILEMGR_OpenFile(pFileMgr,"vdj.txt",_OFM_APPEND);
    }

    IFILEMGR_Release(pFileMgr);

    //构造Log时间的字符串
    WSPRINTF(szLogTime,128,L"Datetime is:%d-%d-%d-%d:%d:%d",year,month,day,hour,minute,second);

    //根据提供的szText然后结合记录Log的时间构造Log日志
    WSPRINTF(szLog,300,L"%s---%s\n",szLogTime,pszText);

    IFILE_Write(pFile,szLog,sizeof(AECHAR)*WSTRLEN(szLog));

    IFILE_Release(pFile);
    
    return TRUE;

}

//初始化全局结构数据
static boolean CVDJApp_InitAppData(CVDJApp *pMe)
{
    pMe->m_eActiveWinID = WINID_NONE;
    pMe->m_eSuspendWinID = WINID_NONE;
    pMe->m_pIActiveWin = NULL;

    pMe->m_bShowSplash = TRUE;

    CALLBACK_Init(&pMe->m_cbRedraw, (PFNNOTIFY)CVDJApp_RedrawNotify, pMe);

    return TRUE;
}

//释放全局结构数据
static boolean CVDJApp_FreeAppData(IApplet *po)
{
    CVDJApp * pMe = (CVDJApp *)po;

    CVDJAPP_RELEASEWIN(pMe->m_pIActiveWin);
    return TRUE;

}

static void CVDJApp_Splashtimer(CVDJApp *pMe)
{
    if(NULL!=pMe->m_pSplashImage)
    {
        IIMAGE_Release(pMe->m_pSplashImage);
    }
    CVDJApp_SetWindow(pMe,WINID_VDJMAIN,0);
}

boolean CVDJApp_SetWindow(CVDJApp * pMe, WINID eWinID, uint32 dwParam)
{
   //下面是用CVDJApp_SetWindow( 窗体类型 )设置的窗体,
   //类似华为的ShowWindow,所以先把以前的窗体释放掉,然后再创建新的窗体
   if(TRUE==pMe->m_bShowSplash)
   {
       pMe->m_pSplashImage=ISHELL_LoadResImage(pMe->a.m_pIShell,VDJAPP_RES_FILE,IDB_LOGOIMAGE); 
       IIMAGE_Draw(pMe->m_pSplashImage,25,40);
       IDISPLAY_Update(pMe->a.m_pIDisplay);
       pMe->m_bShowSplash = FALSE;
       ISHELL_SetTimer(pMe->a.m_pIShell,2000,(PFNNOTIFY)CVDJApp_Splashtimer,pMe);
       return TRUE;
   } 

   CVDJAPP_RELEASEWIN(pMe->m_pIActiveWin);

   switch (eWinID)
   {
      case WINID_VDJMAIN:
      {
         pMe->m_pIActiveWin = CVDJMain_New(pMe); 

         break;
      }
      
      case WINID_VDJEDIT:   
      {
         pMe->m_pIActiveWin = CVDJEdit_New(pMe); 
         break;
      }
      
      default:             
      {
         return FALSE; 
         break;
      }        
   }

   if (!pMe->m_pIActiveWin)
   {
      pMe->m_eActiveWinID = WINID_NONE;
      return FALSE;
   }

   pMe->m_eActiveWinID = eWinID;

   if(NULL!=pMe->m_pIActiveWin)
   {    
      IWINDOW_Enable(pMe->m_pIActiveWin);
      IWINDOW_Redraw(pMe->m_pIActiveWin);
   }

   return TRUE;
}

/*===========================================================================
   This function schedules an aynchronous redraw if bDefer is TRUE else
   it redras immediately.
===========================================================================*/
void CVDJApp_Redraw(CVDJApp * pme, boolean bDefer)
{
   if (pme->m_bRedraw)
      return;

   pme->m_bRedraw = TRUE;

   if (bDefer)
      ISHELL_Resume(pme->a.m_pIShell, &pme->m_cbRedraw);
   else
      CVDJApp_RedrawNotify(pme);
}

/*===========================================================================
   This function redraws the current window.
   This function is called either by IShell in response to the resume scheduled
   in CMediaPlayer_Redraw() or by CMediaPlayer_Redraw() directly.
===========================================================================*/
void CVDJApp_RedrawNotify(CVDJApp * pme)
{
   if (!pme->m_bRedraw)
      return;

   pme->m_bRedraw = FALSE;

   if (pme->m_pIActiveWin)
   {
      IWINDOW_Enable(pme->m_pIActiveWin);
      IWINDOW_Redraw(pme->m_pIActiveWin);
   }
}


int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
   *ppObj = NULL;
        
   if(ClsId == AEECLSID_VDJAPP){
      if(AEEApplet_New(sizeof(CVDJApp), ClsId, pIShell,po,(IApplet**)ppObj,
         (AEEHANDLER)CVDJApp_HandleEvent,(PFNFREEAPPDATA)CVDJApp_FreeAppData) == TRUE)
      {
         //初始化应用程序数据
         CVDJApp_InitAppData((CVDJApp *)*ppObj);
         
         return (AEE_SUCCESS);
      }
      else
      {
         //Release the applet. This will free the memory allocated for the applet when
         *ppObj = NULL;
         IAPPLET_Release((IApplet*)*ppObj);
   
         return EFAILED;
      }
   }
    return (EFAILED);
}



//VDJApp Applet的事件处理函数
static boolean CVDJApp_HandleEvent(CVDJApp * pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{  
    switch (eCode) 
    {
        case EVT_APP_START:                                    
        {   
            //显示3秒钟的SplashScreen,然后显示Main Window
            CVDJApp_SetWindow(pMe, WINID_VDJMAIN, 0);
            
            return TRUE;
        }
        
        case EVT_APP_STOP:
        {
            return TRUE;
        }

        case EVT_COPYRIGHT_END:
        {
            if(pMe->m_pIActiveWin)
            {
                return IWINDOW_HandleEvent(pMe->m_pIActiveWin, eCode, wParam, dwParam);
            }

        }
        case EVT_KEY:              // Process key event
        case EVT_COMMAND:          // Process menu command event
        {
            if(pMe->m_pIActiveWin)
            {
                return IWINDOW_HandleEvent(pMe->m_pIActiveWin, eCode, wParam, dwParam);
            }
        }

        default:
        {
            break;
        }
        
    }
    return FALSE;
}


⌨️ 快捷键说明

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