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

📄 framelist.cpp

📁 刚上传内容的相关CODEC不能单独上传。于是
💻 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 + -