📄 videobackupdlg.cpp
字号:
// VideoBackupDlg.cpp : implementation file
//
#include "stdafx.h"
#include "gtmpeg.h"
#include "VideoBackupDlg.h"
#include "GtMpegWnd.h"
#include "PlayList.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CMutex g_ProgressMutex;
void BackupProgress(CVideoBackupDlg * pDlg);
////////////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////////////
void BackupProgress(CVideoBackupDlg * pDlg)
{
int nPreTicks=0, nCurTicks=0;
CSingleLock SingleLock(&g_ProgressMutex);
while(pDlg->m_bProgress)
{
nCurTicks = GetTickCount();
nPreTicks = nCurTicks;
pDlg->m_nPos+=10;
pDlg->m_cProgress.SetPos(pDlg->m_nPos);
SingleLock.Unlock();
}
}
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////
CVideoBackupDlg::CVideoBackupDlg(CGtMpegWnd* pParent /*=NULL*/)
: CDialog(CVideoBackupDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CVideoBackupDlg)
m_Date = COleDateTime::GetCurrentTime();
//}}AFX_DATA_INIT
m_pParentWnd=pParent;
m_sDrive="";
m_bProgress=FALSE;
}
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////
void CVideoBackupDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVideoBackupDlg)
DDX_Control(pDX, IDC_PROGRESS, m_cProgress);
DDX_Control(pDX, IDC_DRIVE_LIST, m_cDriveList);
DDX_Control(pDX, IDC_RECORD_DATE, m_cRecordDate);
DDX_Control(pDX, IDC_CHANNEL_BOX, m_cChannelBox);
DDX_DateTimeCtrl(pDX, IDC_RECORD_DATE, m_Date);
//}}AFX_DATA_MAP
DDX_Control(pDX, IDC_TIME_GRID, m_cTimeGrid);
}
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CVideoBackupDlg, CDialog)
//{{AFX_MSG_MAP(CVideoBackupDlg)
ON_CBN_CLOSEUP(IDC_CHANNEL_BOX, OnCloseupChannelBox)
ON_NOTIFY(DTN_CLOSEUP, IDC_RECORD_DATE, OnCloseupRecordDate)
ON_CBN_CLOSEUP(IDC_DRIVE_LIST, OnCloseupDriveList)
ON_BN_CLICKED(IDC_DEL, OnDel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////
BOOL CVideoBackupDlg::OnInitDialog()
{
CDialog::OnInitDialog();
for(DWORD i=0;i<g_dwNumberOfSlots;i++)
{
CString sTxt;
sTxt.Format("频道%d",i+1);
m_cChannelBox.AddString(sTxt);
}
CStringArray arDrive;
GetDriveList(DRIVE_CDROM,arDrive);
for(int j=0;j<arDrive.GetSize();j++)
m_cDriveList.AddString(arDrive.GetAt(j));
if(arDrive.GetSize()>0)
{
m_cDriveList.SetCurSel(0);
m_sDrive=arDrive.GetAt(0);
}
m_nChannel=0;
m_cChannelBox.SetCurSel(m_nChannel);
CheckfileValid(GetAppPath()+"mpeg");
CRect rect;
m_cProgress.GetClientRect(rect);
m_cProgress.SetRange(0,rect.Width());
m_cProgress.SetStep(10);
m_nPos=0;
m_cProgress.SetPos(m_nPos);
m_nPos+=10;
m_cProgress.SetPos(m_nPos);
return TRUE;
}
////////////////////////////////////
//
///////////////////////////////////
void CVideoBackupDlg::OnDel()
{
BOOL bSection=FALSE;
m_cRecordDate.GetTime(m_Date);
CString sDate;
CPlayList *pList;
sDate=m_Date.Format("%Y%m%d");
m_arPlayList.SetSize(0);
m_arFileName.SetSize(0);
for(int i=1;i<m_cTimeGrid.m_nRows;i++)
{
for(int j=1;j<m_cTimeGrid.m_nCols;j++)
{
switch(m_cTimeGrid.GetCellStates(i,j))
{
case GVIS_NOSELECTED:
if(bSection)
{
pList=m_arPlayList.GetAt(m_arPlayList.GetSize()-1);
int nEndRow=i-1,nEndCol=j-1;
if(j==1)
{
nEndRow--;
nEndCol=59;//m_cTimeGrid.m_nCols-1;
}
pList->m_sEndTime.Format("%02d:%02d",nEndRow,nEndCol-1);
bSection=FALSE;
}
break;
case GVIS_SELECTED:
if(!bSection)
{
pList=new CPlayList;
m_arPlayList.Add(pList);
pList->m_nChannel=m_nChannel;
pList->m_sPlayDate=sDate;
pList->m_sStartTime.Format("%02d:%02d",i-1,j-1);
bSection=TRUE;
}
break;
}
}
}
if(!EnableBackupFile(sDate,GetAppPath()+"Mpeg",m_arFileName)==FALSE)
{
}
if(m_arFileName.GetSize()==0)
{
MessageBox("所选择的时间段没有进行录像,请重新选择!");
return;
}
//
for(i=0;i<m_arFileName.GetSize();i++)
{
char sSource[MAX_PATH];
strcpy(sSource,m_arFileName.GetAt(i));
if(!DeleteFile(sSource))
{
}
}
MessageBox("文件删除完毕");
m_arFileName.SetSize(0);
if(m_arPlayList.GetSize()!=0)
{
for(int i=0;i<m_arPlayList.GetSize();i++)
delete m_arPlayList.GetAt(i);
m_arPlayList.RemoveAll();
}
CheckfileValid(GetAppPath()+"mpeg");
}
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////
void CVideoBackupDlg::OnOK()
{
if(m_sDrive=="")
{
MessageBox("请选择备份盘!");
return;
}
if(GetDiskFreeSpace(m_sDrive)<45)
{
MessageBox("选择备份盘没有足够的空间!");
return;
}
CString sCurDir=GetCurrentDirectory();
if(!SetCurrentDirectory(m_sDrive))
{
MessageBox("请插入磁盘到"+m_sDrive+"中!");
return;
}
SetCurrentDirectory(sCurDir);
BOOL bSection=FALSE;
m_cRecordDate.GetTime(m_Date);
CString sDate;
CPlayList *pList;
sDate=m_Date.Format("%Y%m%d");
m_arPlayList.SetSize(0);
m_arFileName.SetSize(0);
for(int i=1;i<m_cTimeGrid.m_nRows;i++)
{
for(int j=1;j<m_cTimeGrid.m_nCols;j++)
{
switch(m_cTimeGrid.GetCellStates(i,j))
{
case GVIS_NOSELECTED:
if(bSection)
{
pList=m_arPlayList.GetAt(m_arPlayList.GetSize()-1);
int nEndRow=i-1,nEndCol=j-1;
if(j==1)
{
nEndRow--;
nEndCol=59;//m_cTimeGrid.m_nCols-1;
}
pList->m_sEndTime.Format("%02d:%02d",nEndRow,nEndCol-1);
bSection=FALSE;
}
break;
case GVIS_SELECTED:
if(!bSection)
{
pList=new CPlayList;
m_arPlayList.Add(pList);
pList->m_nChannel=m_nChannel;
pList->m_sPlayDate=sDate;
pList->m_sStartTime.Format("%02d:%02d",i-1,j-1);
bSection=TRUE;
}
break;
}
}
}
if(!EnableBackupFile(sDate,GetAppPath()+"Mpeg",m_arFileName)==FALSE)
{
}
if(m_arFileName.GetSize()==0)
{
MessageBox("所选择的时间段没有进行录像,请重新选择!");
return;
}
//
m_bProgress=TRUE;
//AfxBeginThread((AFX_THREADPROC) BackupProgress,(LPVOID)this);
CString sBackupFile;
for(i=0;i<m_arFileName.GetSize();i++)
{
sBackupFile=m_arFileName.GetAt(i);
sBackupFile=sBackupFile.Right(21);
sBackupFile=m_sDrive+sBackupFile;
char sSource[MAX_PATH],sTarget[MAX_PATH];
strcpy(sSource,m_arFileName.GetAt(i));
strcpy(sTarget,sBackupFile);
if(!MoveFile(sSource,sTarget))
{
while(MessageBox("没有磁盘空间,请插入一张新盘!","换盘",MB_OKCANCEL)==IDOK)
{
if(MoveFile(sSource,sTarget))
break;
}
}
}
MessageBox("备份完毕");
m_bProgress=FALSE;
m_arFileName.SetSize(0);
if(m_arPlayList.GetSize()!=0)
{
for(int i=0;i<m_arPlayList.GetSize();i++)
delete m_arPlayList.GetAt(i);
m_arPlayList.RemoveAll();
}
CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////
void CVideoBackupDlg::OnCloseupChannelBox()
{
int nIndex=m_cChannelBox.GetCurSel();
if(nIndex!=m_nChannel)
{
m_nChannel=nIndex;
CheckfileValid(GetAppPath()+"mpeg");
}
}
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////
BOOL CVideoBackupDlg::CheckfileValid(CString sPath)
{
m_cTimeGrid.SetNoValid();
m_cRecordDate.GetTime(m_Date);
CString sDate;
sDate=m_Date.Format("%Y%m%d");
CFileFind PlayFile;
CString sFind;
sFind.Format("%02d-%s",m_nChannel+1,sDate);
sFind+="*.mpg";
sFind=sPath+"\\"+sFind;
BOOL bFind=PlayFile.FindFile(sFind);
if(bFind)
{
while(bFind)
{
bFind=PlayFile.FindNextFile();
CString sTmp=PlayFile.GetFileTitle();
CString sHour,sMinute,sEndHour,sEndMinute,sTmp1;
sHour=sTmp.Mid(11,2);
sMinute=sTmp.Mid(13,2);
CTime LastTime;
PlayFile.GetLastWriteTime(LastTime);
sEndHour=LastTime.Format("%H");
sEndMinute=LastTime.Format("%M");
if(sHour<sEndHour)
{
for(int i=StringToInt(sHour)+1;i<StringToInt(sEndHour)+1;i++)
{
for(int j=StringToInt(sMinute)+1;j<=60;j++)
{
m_cTimeGrid.SetValidCell(i,j);
m_cTimeGrid.RedrawCell(i,j);
}
for(j=0;j<=StringToInt(sEndMinute)+1;j++)
{
m_cTimeGrid.SetValidCell(i+1,j);
m_cTimeGrid.RedrawCell(i+1,j);
}
}
}
else
{
for(int j=StringToInt(sMinute)+1;j<=StringToInt(sEndMinute)+1;j++)
{
m_cTimeGrid.SetValidCell(StringToInt(sHour)+1,j);
m_cTimeGrid.RedrawCell(StringToInt(sHour)+1,j);
}
}
if(!bFind)
return TRUE;
}
}
return FALSE;
}
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////
void CVideoBackupDlg::OnCloseupRecordDate(NMHDR* pNMHDR, LRESULT* pResult)
{
CheckfileValid(GetAppPath()+"mpeg");
*pResult = 0;
}
/////////////////////////////////
//
/////////////////////////////////
BOOL CVideoBackupDlg::EnableBackupFile(CString sDate,CString sPath,CStringArray &arFileName)
{
CFileFind PlayFile;
CString sFind;
sFind.Format("%02d-%s",m_nChannel+1,sDate);
sFind+="*.mpg";
sFind=sPath+"\\"+sFind;
for(int i=0;i<m_arPlayList.GetSize();i++)
{
CPlayList *pList=m_arPlayList.GetAt(i);
double fStartTime=StringToFloat(pList->m_sStartTime.Left(2)+"."+pList->m_sStartTime.Right(2));
double fEndTime=StringToFloat(pList->m_sEndTime.Left(2)+"."+pList->m_sEndTime.Right(2));
BOOL bFind=PlayFile.FindFile(sFind);
while(bFind)
{
bFind=PlayFile.FindNextFile();
CString sTmp=PlayFile.GetFileTitle();
CTime Time;
PlayFile.GetLastWriteTime(Time);
double fFileEndTime=StringToFloat(Time.Format("%H.%M"));
double fFileStartTime=StringToFloat(sTmp.Mid(11,2)+"."+sTmp.Mid(13,2));
if(fFileStartTime>=fStartTime&&fFileStartTime<=fEndTime)//选择的时间段中包含一个文件
arFileName.Add(PlayFile.GetFilePath());
else if(fStartTime>fFileStartTime&&fEndTime<fFileEndTime)//选择的时间段中包含在一个文件
{
arFileName.Add(PlayFile.GetFilePath());
}
}
}
return TRUE;
}
////////////////////////////////////////////
//
////////////////////////////////////////////
void CVideoBackupDlg::OnCloseupDriveList()
{
m_cDriveList.GetLBText(m_cDriveList.GetCurSel(),m_sDrive);
}
////////////////////////////////////
//
///////////////////////////////////
void CVideoBackupDlg::OnCancel()
{
if(m_bProgress)
return;
CDialog::OnCancel();
}
////////////////////////////////////
//
///////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -