📄 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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -