📄 framelist.cpp
字号:
// FrameList.cpp: implementation of the CFrameList class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MagicScissors.h"
#include "FrameList.h"
#include "FrameInfo.h"
#include "WriteObjDlg.h"
#include "MainFrm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFrameList::CFrameList()
{
m_pRoot = m_pLast = NULL;
}
CFrameList::~CFrameList()
{
if( m_pRoot ) DeleteAll();
}
BOOL CFrameList::AddFrame(int n, CSize size)
{
CFrameInfo* pFrame;
CFrameInfo* pCur;
CFrameInfo* pPrev;
pFrame = new CFrameInfo(n, size);
if( m_pRoot )
{
pCur = m_pRoot;
while( pCur )
{
if( pCur->GetFrameNum() > n )
break;
pCur = pCur->m_pNext;
}
if( pCur )
{
if( pCur == m_pRoot )
{
m_pRoot = pFrame;
pFrame->m_pNext = pCur;
pCur->m_pPrev = pFrame;
}
else
{
pPrev = pCur->m_pPrev;
pPrev->m_pNext = pFrame;
pFrame->m_pPrev = pPrev;
pCur->m_pPrev = pFrame;
pFrame->m_pNext = pCur;
}
}
else
{
m_pLast->m_pNext = pFrame;
pFrame->m_pPrev = m_pLast;
m_pLast = pFrame;
}
}
else
{
m_pRoot = pFrame;
m_pLast = pFrame;
}
return TRUE;
}
BOOL CFrameList::AddFrame(CFrameInfo* pFrame)
{
CFrameInfo* pCur;
CFrameInfo* pPrev;
int n = pFrame->GetFrameNum();
if( m_pRoot )
{
pCur = m_pRoot;
while( pCur )
{
if( pCur->GetFrameNum() > n )
break;
pCur = pCur->m_pNext;
}
if( pCur )
{
if( pCur == m_pRoot )
{
m_pRoot = pFrame;
pFrame->m_pNext = pCur;
pCur->m_pPrev = pFrame;
}
else
{
pPrev = pCur->m_pPrev;
pPrev->m_pNext = pFrame;
pFrame->m_pPrev = pPrev;
pCur->m_pPrev = pFrame;
pFrame->m_pNext = pCur;
}
}
else
{
m_pLast->m_pNext = pFrame;
pFrame->m_pPrev = m_pLast;
m_pLast = pFrame;
}
}
else
{
m_pRoot = pFrame;
m_pLast = pFrame;
}
return TRUE;
}
CFrameInfo* CFrameList::GetFrame(int n)
{
CFrameInfo* pFrame;
pFrame = m_pRoot;
while( pFrame )
{
if( pFrame->GetFrameNum() == n ) return pFrame;
pFrame = pFrame->m_pNext;
}
return NULL;
}
BOOL CFrameList::DeleteAll()
{
CFrameInfo* pFrame;
CFrameInfo* pNext;
pFrame = m_pRoot;
while( pFrame )
{
pNext = pFrame->m_pNext;
delete pFrame;
pFrame = pNext;
}
m_pRoot = m_pLast = NULL;
return TRUE;
}
int CFrameList::GetTotal()
{
CFrameInfo* pFrame;
int n = 0;
pFrame = m_pRoot;
while( pFrame )
{
n++;
pFrame = pFrame->m_pNext;
}
return n;
}
BOOL CFrameList::Write(CFile* pFile)
{
CFrameInfo* pFrame;
int n;
n = GetTotal();
CString output;
CWriteObjDlg* pDlg = new CWriteObjDlg;
pDlg->Create(IDD_WRITE_OBJECT);
pDlg->SetWindowText("单捞磐甫 历厘钦聪促.");
pDlg->m_Progress.SetRange(0, n-1);
pDlg->m_Progress.SetPos(0);
output.Format("0 / %d ", n );
pDlg->GetDlgItem(IDC_OUT)->SetWindowText(output);
pDlg->ShowWindow(SW_SHOW);
pDlg->CenterWindow();
pFile->Write( &n, sizeof(int) );
int count = 0;
pFrame = m_pRoot;
while( pFrame )
{
if( !pFrame->Write(pFile) )
{
AfxMessageBox("单捞磐甫 历厘且 荐 绝嚼聪促.");
break;
}
pFrame = pFrame->m_pNext;
((CProgressCtrl*)pDlg->GetDlgItem(IDC_PROGRESS1))->SetPos(count);
pDlg->UpdateWindow();
count++;
output.Format("%d / %d", count, n);
pDlg->GetDlgItem(IDC_OUT)->SetWindowText(output);
}
pDlg->ShowWindow(SW_HIDE);
pDlg->DestroyWindow();
delete pDlg;
return TRUE;
}
BOOL CFrameList::Read(CFile* pFile)
{
CFrameInfo* pFrame;
int n;
pFile->Read( &n, sizeof(int) );
CString output;
CWriteObjDlg* pDlg = new CWriteObjDlg;
pDlg->Create(IDD_WRITE_OBJECT);
pDlg->SetWindowText("单捞磐甫 阂矾可聪促.");
pDlg->m_Progress.SetRange(0, n-1);
pDlg->m_Progress.SetPos(0);
output.Format("0 / %d ", n );
pDlg->GetDlgItem(IDC_OUT)->SetWindowText(output);
pDlg->ShowWindow(SW_SHOW);
pDlg->CenterWindow();
for( int i = 0 ; i < n ; i++ )
{
pFrame = new CFrameInfo;
if( pFrame )
{
if( !pFrame->Read(pFile) ) return FALSE;
AddFrame(pFrame);
}
else
return FALSE;
((CProgressCtrl*)pDlg->GetDlgItem(IDC_PROGRESS1))->SetPos(i);
pDlg->UpdateWindow();
output.Format("%d / %d", i+1, n);
pDlg->GetDlgItem(IDC_OUT)->SetWindowText(output);
if( pFrame->GetObjList() )
((CMainFrame*)AfxGetMainWnd())->m_wndVideoControlBar.SetSelect(pFrame->GetFrameNum());
}
pDlg->ShowWindow(SW_HIDE);
pDlg->DestroyWindow();
delete pDlg;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -