📄 vdjapp.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 + -