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

📄 oldapp_sync728view.cpp

📁 SyncML 协议的同步实现的数据备份,是基于wince平台,,也可很容易移植到其它平台
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// App_Sync728View.cpp : implementation of the CApp_Sync728View class
//

#include "stdafx.h"
#include "App_Sync728.h"

#include "App_Sync728Doc.h"
#include "App_Sync728View.h"
#include "progressdlg.h"
#include "..\datamanager\858datamanager.h"
#include "..\datamanager\datamanager.h"
#include "..\common\XzipDLLInterface.h"

#include <afx.h>

#include <vector>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

using namespace std;

#ifndef MAX_PATH_LEN
#define MAX_PATH_LEN 256
#endif

extern BOOL bAutoRemind;
extern BOOL bReplace;
extern BOOL bPassword;
extern wchar_t wszLastZip[MAX_PATH_LEN];
extern wchar_t wszLastXDB[MAX_PATH_LEN];

#define MAX_NEED_SPACE		(8*1024*1024)

extern Item_t item728Array[12];
extern Item_t item858Array[3];

/////////////////////////////////////////////////////////////////////////////
// CApp_Sync728View

IMPLEMENT_DYNCREATE(CApp_Sync728View, CFormView)

BEGIN_MESSAGE_MAP(CApp_Sync728View, CFormView)
	//{{AFX_MSG_MAP(CApp_Sync728View)
	ON_BN_CLICKED(IDC_BUTTON_BACKUP, OnButtonBackup)
	ON_BN_CLICKED(IDC_BUTTON_RECOVER, OnButtonRecover)
	//ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, OnSelchangeTab)	
	ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
	ON_EN_CHANGE(IDC_EDIT_FILE, OnChangeEditFile)
	//}}AFX_MSG_MAP
	ON_MESSAGE(MSG_TAB_SEL_CHANGE, OnSelchangeTabSel)
	//ON_COMMAND(MSG_TAB_SEL_CHANGE, OnSelchangeTabSel)
	//ON_MESSAGE(MSG_TAB_SEL_CHANGE, OnSelchangeTabSel)
	//WM_COMMAND(MSG_TAB_SEL_CHANGE, OnSelchangeTabSel)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CApp_Sync728View construction/destruction

CApp_Sync728View::CApp_Sync728View()
	: CFormView(CApp_Sync728View::IDD)
{
	//{{AFX_DATA_INIT(CApp_Sync728View)
	m_strFile = _T("");
	m_strMsg = _T("");
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	m_pDataManager = NULL;
	m_hwndDlg = 0;
	m_nSelected = VIEW_BACKUP;

	m_pTabItem = NULL;

	m_pMsgUI = NULL;
}

CApp_Sync728View::~CApp_Sync728View()
{
	delete m_pMsgUI;
	delete m_pTabItem;
	delete m_pDataManager;
	if (m_pDataManager != NULL)
	{
		delete m_pDataManager;
	}
}

void CApp_Sync728View::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CApp_Sync728View)
	DDX_Control(pDX, IDC_PROGRESS_SYNC, m_ctrlProgress);
//	DDX_Control(pDX, IDC_TAB, m_tab);
	DDX_Control(pDX, IDC_LIST_ITEM, m_listItem);
	DDX_Text(pDX, IDC_EDIT_FILE, m_strFile);
	DDX_Text(pDX, IDC_STATIC_MSG, m_strMsg);
	//}}AFX_DATA_MAP
}

BOOL CApp_Sync728View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CApp_Sync728View diagnostics

#ifdef _DEBUG
void CApp_Sync728View::AssertValid() const
{
	CFormView::AssertValid();
}

void CApp_Sync728View::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CApp_Sync728Doc* CApp_Sync728View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CApp_Sync728Doc)));
	return (CApp_Sync728Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CApp_Sync728View message handlers

void CApp_Sync728View::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();

	// TODO: Add your specialized code here and/or call the base class

	//m_pTab = new 
	//m_pTabItem = new CImgTab(IDB_TAB_NORMAL, IDB_TAB_SELECT, 48);
	m_pTabItem = new CImgTab(IDB_TAB_REPEAT_NORMAL, IDB_TAB_REPEAT_SELECT, 72);
	CRect rcTabArea;
	//CStatic *pStatic = (CStatic *)GetDlgItem(IDC_STATIC_TAB);
	CStatic *pStatic = (CStatic *)GetDlgItem(IDC_TAB);
	pStatic->GetWindowRect(rcTabArea);
	ScreenToClient(rcTabArea);
	m_pTabItem->Create(rcTabArea, this, IDC_TAB_SEL);

	m_pTabItem->InsertItem(_T("备份"));
	m_pTabItem->InsertItem(_T("恢复"));
	m_pTabItem->InsertItem(_T("858导入"));

	m_pTabItem->SetCurSel(0);

	m_ctrlProgress.SetRange(0, 99);
/*
	TCITEM item;
	memset(&item, 0, sizeof (item));
	item.mask = TCIF_TEXT; 
	item.pszText = TEXT("备份");
	m_tab.InsertItem(0, &item);
	item.pszText = TEXT("恢复");
	m_tab.InsertItem(1, &item);
	item.pszText = TEXT("858导入");
	m_tab.InsertItem(2, &item);
*/	
	m_listItem.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
	m_listItem.InsertColumn(0, _T("编号"),	LVCFMT_LEFT, 80);
	m_listItem.InsertColumn(1, _T("数据"),  LVCFMT_LEFT, 150);

	m_pMsgUI = new CSD728Msg(this);

	RefreshView();	
}

void CApp_Sync728View::DisplayItems()
{
	m_listItem.DeleteAllItems();

	if (/*m_nSelected*/m_pTabItem->GetCurSel() == VIEW_BACKUP)
	{
		for (int i= 0; i < 12; i++)
		{
			LV_ITEM lvItem;
	
			lvItem.mask = LVIF_TEXT ;
			lvItem.iSubItem=0;
			lvItem.iItem = i;
			wchar_t szID[10];
			wsprintf(szID, TEXT("%d"), i+1/**/);

			lvItem.pszText = szID;	
			m_listItem.InsertItem( &lvItem );

			lvItem.mask = LVIF_TEXT ;
			lvItem.iSubItem=1;
			lvItem.iItem = i;
			lvItem.pszText = item728Array[i].szName;		
			m_listItem.SetItem(&lvItem);

			m_listItem.SetItemData(i, item728Array[i].no);
		}
	}
	if (/*m_nSelected*/m_pTabItem->GetCurSel() == VIEW_RECOVER)
	{
		FileAttrType *pFileAttrType = NULL;
		DWORD nListNum = 0;
	
		char szZipFile[128];
		WideCharToMultiByte(CP_ACP, 0, (LPCTSTR)m_strFile, -1, szZipFile, sizeof(szZipFile) - 1, NULL, NULL );

		GetFileList(szZipFile, NULL, &nListNum);
		pFileAttrType = new FileAttrType[nListNum];
		memset(pFileAttrType, 0, sizeof (FileAttrType)*nListNum);

		GetFileList(szZipFile, pFileAttrType, &nListNum); 

		for (int i=0; i<nListNum; i++)
		{
			for (int j=0; j< 12; j++)
			{
				if (strcmp(pFileAttrType[i].fileName, item728Array[j].szZip) == 0)
				{
					LV_ITEM lvItem;
	
					lvItem.mask = LVIF_TEXT ;
					lvItem.iSubItem=0;
					lvItem.iItem = i;
					wchar_t szID[10];
					wsprintf(szID, TEXT("%d"), i+1/**/);

					lvItem.pszText = szID;	
					m_listItem.InsertItem( &lvItem );

					lvItem.mask = LVIF_TEXT ;
					lvItem.iSubItem=1;
					lvItem.iItem = i;

					lvItem.pszText = item728Array[j].szName;		
					m_listItem.SetItem(&lvItem);
					m_listItem.SetItemData(i, item728Array[j].no);
					break;
				}
			}
		}
	}
	if (VIEW_858 == m_pTabItem->GetCurSel()/*m_nSelected*/)
	{
		for (int i=0; i<12; i++)
		{
			LV_ITEM lvItem;
	
			lvItem.mask = LVIF_TEXT ;
			lvItem.iSubItem=0;
			lvItem.iItem = i;
			wchar_t szID[10];
			wsprintf(szID, TEXT("%d"), i+1/**/);

			lvItem.pszText = szID;	
			m_listItem.InsertItem( &lvItem );

			lvItem.mask = LVIF_TEXT ;
			lvItem.iSubItem=1;
			lvItem.iItem = i;
			lvItem.pszText = item858Array[i].szName;		
			m_listItem.SetItem(&lvItem);

			m_listItem.SetItemData(i, item858Array[i].no);
		}
	}
}

void CApp_Sync728View::OnButtonBackup() 
{
	// TODO: Add your control notification handler code here
	vector<Item_t> vctItems;
	if (GetCheckedItems(vctItems))
	{
		m_pTabItem->EnableWindow(FALSE);
		CButton *pBnt1 = (CButton *)GetDlgItem(IDC_BUTTON_BACKUP);
		CButton *pBnt2 = (CButton *)GetDlgItem(IDC_BUTTON_RECOVER);
		pBnt1->EnableWindow(FALSE);
		pBnt2->EnableWindow(FALSE);

		m_pDataManager->Backup(vctItems, (LPTSTR)(LPCTSTR)m_strFile);
	}	
}

void CApp_Sync728View::OnButtonRecover() 
{
	// TODO: Add your control notification handler code here
	vector<Item_t> vctItems;

	BOOL bEnoughSpace = TRUE;
	BOOL bIsUserData = TRUE;

	if (m_pTabItem->GetCurSel() != VIEW_BACKUP)
	{
		WIN32_FIND_DATA fileData;
		HANDLE hFindFile = FindFirstFile((LPCTSTR)m_strFile, &fileData);
		if (hFindFile == INVALID_HANDLE_VALUE)
		{
			SendMessage(TEXT("没有找到您指定的文件"));
			FindClose(hFindFile);
			return;
		}
		FindClose(hFindFile);
	}

	CButton *pBnt1 = (CButton *)GetDlgItem(IDC_BUTTON_RECOVER);	CButton *pBnt2 = (CButton *)GetDlgItem(IDC_BUTTON_BROWSE);
	pBnt1->EnableWindow(FALSE);
	pBnt2->EnableWindow(FALSE);
	m_pTabItem->EnableWindow(FALSE);
	m_listItem.EnableWindow(FALSE);
	GetParent()->EnableWindow(FALSE);

	ULARGE_INTEGER totalBytes,freeBytes,callerBytes;///当前的磁盘信息

	if (GetCheckedItems(vctItems))
	{	
		if (m_pTabItem->GetCurSel() == VIEW_RECOVER)
		{
			if (GetDiskFreeSpaceEx(TEXT("\\USERDATA"),&callerBytes,&totalBytes,&freeBytes))
			{				
				if(freeBytes.QuadPart>MAX_NEED_SPACE)
				{
					bEnoughSpace = TRUE;
					m_pDataManager->Recover(vctItems, (LPTSTR)(LPCTSTR)m_strFile);	
				}
			}
		}
		else if (m_pTabItem->GetCurSel() == VIEW_BACKUP)
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -