www.pudn.com > ElectronicAlbums.rar > PicSerialize.cpp


// PicSerialize.cpp: implementation of the CPicSerialize class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "EPicBook.h" 
#include "PicSerialize.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CPicSerialize::CPicSerialize() 
{ 
	m_nPage = 0; 
	m_nPhoNum = 0; 
} 
 
CPicSerialize::~CPicSerialize() 
{ 
	for(int i = 0; i < ebookItems.size(); ++i) 
	{ 
		delete ebookItems[i]; 
	} 
	ebookItems.clear(); 
} 
 
void CPicSerialize::Serialize(CArchive& ar) 
{ 
	CInfoZip InfoZip; 
	if (!InfoZip.InitializeZip()) 
	{ 
		AfxMessageBox("Must be initialized", MB_OK); 
		return; 
	} 
	if(ar.IsStoring()) 
	{ 
		m_nPhoNum = 0; 
		ar << m_nPage; 
		for(int i = 0; i < m_nPage; ++i) 
		{ 
			ar << ebookItems[i]->nPage; 
			ar << ebookItems[i]->ePageType; 
			ar << ebookItems[i]->picPath1; 
 
			if(!ebookItems[i]->picPath1.IsEmpty()) 
				++m_nPhoNum; 
			if(ebookItems[i]->ePageType == 	LEFTTORIGHT || ebookItems[i]->ePageType == UPTODOWN) 
			{ 
				ar << ebookItems[i]->picPath2; 
				if(!ebookItems[i]->picPath2.IsEmpty()) 
				{ 
					++m_nPhoNum; 
				} 
			} 
		} 
	} 
	else 
	{ 
		ar >> m_nPage; 
		for(int i = 0; i < m_nPage; ++i) 
		{ 
			EBook_Item* pItem = new EBook_Item; 
			ar >> pItem->nPage; 
			ar >> pItem->ePageType; 
			ar >> pItem->picPath1; 
			if(pItem->ePageType == 	LEFTTORIGHT || pItem->ePageType == UPTODOWN) 
			{ 
				ar >> pItem->picPath2; 
			} 
			ebookItems.push_back(pItem); 
		} 
	} 
} 
 
 
void CPicSerialize::InsertNewPage(int nPage, int pageType, CString& path1, CString& path2) 
{ 
	if(nPage <= m_nPage)  //ÐÞ¸Ä 
	{ 
		ebookItems[nPage - 1]->ePageType = pageType; 
		ebookItems[nPage - 1]->picPath1 = path1; 
		ebookItems[nPage - 1]->picPath2 = path2; 
	} 
	else //²åÈëеÄÒ³ 
	{ 
		EBook_Item* pItem = new EBook_Item; 
		pItem->nPage = nPage; 
		pItem->ePageType = pageType; 
		pItem->picPath1 = path1; 
		pItem->picPath2 = path2; 
		 
		ebookItems.push_back(pItem); 
		m_nPage ++; 
	} 
} 
 
void CPicSerialize::GetPageofIndex(int nIndex, int& pageType, CString& path1, CString& path2) 
{ 
	ASSERT(nIndex >0 && nIndex <=  ebookItems.size()); 
	pageType = ebookItems[nIndex - 1]->ePageType; 
	path1 = ebookItems[nIndex - 1]->picPath1; 
	path2 = ebookItems[nIndex - 1]->picPath2; 
} 
 
void CPicSerialize::ZipFiles(CString& strPath) 
{ 
	char** pFiles = new char*[m_nPhoNum]; 
	int j = 0; 
	for(int i = 0; i < m_nPage; ++i) 
	{ 
		if(!ebookItems[i]->picPath1.IsEmpty()) 
		{ 
			int test = ebookItems[i]->picPath1.GetLength(); 
			pFiles[j] = new char[260];  
			memset(pFiles[j], 0, 260); 
			memcpy(pFiles[j], ebookItems[i]->picPath1.GetBuffer(0), ebookItems[i]->picPath1.GetLength()); 
		    j++; 
		}	 
		if(!ebookItems[i]->picPath2.IsEmpty()) 
		{ 
			pFiles[j] = new char[260];  
			memset(pFiles[j], 0, 260); 
			memcpy(pFiles[j], ebookItems[i]->picPath2.GetBuffer(0), ebookItems[i]->picPath2.GetLength()); 
		    j++; 
		}	 
	} 
 
		CInfoZip InfoZip; 
		strPath += "pak"; 
  
		if (!InfoZip.Initialize()) 
		{ 
			AfxMessageBox("Must be initialized", MB_OK); 
			return; 
		} 
 
		if (!InfoZip.InitializeZip()) 
		{ 
			AfxMessageBox("Must be initialized", MB_OK); 
			return; 
		} 
		if (!InfoZip.AddFiles(strPath.GetBuffer(0), pFiles, m_nPhoNum)) 
		{ 
			AfxMessageBox("Files not added", MB_OK); 
			return; 
		} 
		 
		if(!InfoZip.FinalizeZip()) 
		{ 
			AfxMessageBox("Cannot finalizeZip", MB_OK); 
			return; 
		} 
 
		if (!InfoZip.Finalize()) 
		{ 
			AfxMessageBox("Cannot finalize", MB_OK); 
			return; 
		} 
		for(i  = 0; i < m_nPhoNum; ++i) 
		{ 
			delete [] pFiles[i]; 
		} 
		delete [] pFiles; 
}