www.pudn.com > CraftFTP_gb.rar > ConfirmDialog.cpp


// ConfirmDialog.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "CraftFTP.h" 
#include "ShellPidl.h" 
#include "ConfirmDialog.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CConfirmDialog dialog 
 
const DWORD CConfirmDialog::m_nHelpIDs[] = 
{ 
	IDC_STATIC_LOCAL,			HIDC_STATIC_LOCAL, 
	IDC_STATIC_LOCAL_FILENAME,	HIDC_STATIC_LOCAL_FILENAME, 
	IDC_STATIC_LOCAL_FILESIZE,	HIDC_STATIC_LOCAL_FILESIZE, 
	IDC_STATIC_LOCAL_DATETIME,	HIDC_STATIC_LOCAL_DATETIME, 
	IDC_STATIC_REMOTE,			HIDC_STATIC_REMOTE, 
	IDC_STATIC_REMOTE_FILENAME,	HIDC_STATIC_REMOTE_FILENAME, 
	IDC_STATIC_REMOTE_FILESIZE,	HIDC_STATIC_REMOTE_FILESIZE, 
	IDC_STATIC_REMOTE_DATETIME,	HIDC_STATIC_REMOTE_DATETIME, 
	IDC_CHECK_ALLACTION,		HIDC_CHECK_ALLACTION, 
	IDC_BUTTON_OVERWRITE,		HIDC_BUTTON_OVERWRITE, 
	IDC_BUTTON_RESUME,			HIDC_BUTTON_RESUME, 
	IDC_BUTTON_RENAME,			HIDC_BUTTON_RENAME, 
	IDC_BUTTON_SKIP,			HIDC_BUTTON_SKIP, 
	IDCANCEL,					HIDCANCEL, 
	0 , 0 
}; 
 
CConfirmDialog::CConfirmDialog(CWnd* pParent /*=NULL*/) 
	: CDialog(CConfirmDialog::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CConfirmDialog) 
	m_szLocalFileName = _T(""); 
	m_szLocalFileSize = _T(""); 
	m_szLocalDateTime = _T(""); 
	m_szRemoteDateTime = _T(""); 
	m_szRemoteFileName = _T(""); 
	m_szRemoteFileSize = _T(""); 
	m_bAllAction = FALSE; 
	//}}AFX_DATA_INIT 
	m_dwLocalFileSize  = 0; 
	m_dwRemoteFileSize = 0; 
	m_pDefaultCtr	   = NULL; 
	m_nCount		   = -1; 
	m_szTitle		   = _T(""); 
	m_bResume		   = FALSE; 
 
	//默认操作为跳过当前文件 
	m_nOperator		   = 0; 
} 
 
 
void CConfirmDialog::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CConfirmDialog) 
	DDX_Text(pDX, IDC_STATIC_LOCAL_FILENAME, m_szLocalFileName); 
	DDX_Text(pDX, IDC_STATIC_LOCAL_FILESIZE, m_szLocalFileSize); 
	DDX_Text(pDX, IDC_STATIC_LOCAL_DATETIME, m_szLocalDateTime); 
	DDX_Text(pDX, IDC_STATIC_REMOTE_DATETIME, m_szRemoteDateTime); 
	DDX_Text(pDX, IDC_STATIC_REMOTE_FILENAME, m_szRemoteFileName); 
	DDX_Text(pDX, IDC_STATIC_REMOTE_FILESIZE, m_szRemoteFileSize); 
	DDX_Check(pDX, IDC_CHECK_ALLACTION, m_bAllAction); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CConfirmDialog, CDialog) 
	//{{AFX_MSG_MAP(CConfirmDialog) 
	ON_BN_CLICKED(IDC_BUTTON_OVERWRITE, OnButtonOverwrite) 
	ON_BN_CLICKED(IDC_BUTTON_RESUME, OnButtonResume) 
	ON_BN_CLICKED(IDC_BUTTON_RENAME, OnButtonRename) 
	ON_BN_CLICKED(IDC_BUTTON_SKIP, OnButtonSkip) 
	ON_WM_TIMER() 
	ON_WM_DESTROY() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CConfirmDialog message handlers 
 
BOOL CConfirmDialog::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	// TODO: Add extra initialization here 
	//设置定时器 
	SetTimer(10, 1000, NULL); 
 
	//显示图标 
	SHFILEINFO		sfi; 
	CStatic * pStaticLocal = (CStatic*)GetDlgItem(IDC_STATIC_LOCAL); 
	if(pStaticLocal) 
	{ 
		SHGetFileInfo((LPCTSTR)m_szLocalFileName,  
                   0, 
                   &sfi,  
                   sizeof(SHFILEINFO),  
                   SHGFI_SYSICONINDEX | SHGFI_LARGEICON | SHGFI_ICON); 
		pStaticLocal->SetIcon(sfi.hIcon); 
	} 
 
	CStatic * pStaticRemote = (CStatic*)GetDlgItem(IDC_STATIC_REMOTE); 
	if(pStaticRemote) 
	{ 
		if(m_szLocalFileName.Find('.')!=-1) 
		{ 
			CString szLocalExt = m_szLocalFileName.Right(m_szLocalFileName.GetLength()-1-m_szLocalFileName.ReverseFind('.')); 
			if(m_dwLocalFileSize!=m_dwRemoteFileSize &&  
				szLocalExt.CompareNoCase("EXE") == 0) 
			{ 
				CString szTitle = m_szRemoteFileName.Right(m_szRemoteFileName.GetLength()-1-m_szRemoteFileName.ReverseFind('/')); 
				SHGetFileInfo((LPCTSTR)szTitle,  
						   FILE_ATTRIBUTE_NORMAL, 
						   &sfi,  
						   sizeof(SHFILEINFO),  
						   SHGFI_SYSICONINDEX | SHGFI_LARGEICON | SHGFI_ICON | SHGFI_USEFILEATTRIBUTES); 
			} 
		} 
		pStaticRemote->SetIcon(sfi.hIcon); 
	} 
 
	int IDCtrl = 0; 
	if(m_dwLocalFileSize==m_dwRemoteFileSize) 
	{ 
		//设置跳过为默认操作 
		IDCtrl = IDC_BUTTON_SKIP; 
	} 
	else 
	{ 
		//设置续传为默认操作 
		IDCtrl = IDC_BUTTON_RESUME; 
	} 
 
	//服务器不支持断点续传 
	CWnd * pCtrl = GetDlgItem(IDC_BUTTON_RESUME); 
	if((!m_bResume && pCtrl) || m_dwLocalFileSize==m_dwRemoteFileSize) 
	{ 
		if(!m_bResume) 
			IDCtrl = IDC_BUTTON_OVERWRITE; 
 
		pCtrl->EnableWindow(FALSE); 
	} 
 
	m_pDefaultCtr = GetDlgItem(IDCtrl); 
	if(m_pDefaultCtr) 
		m_pDefaultCtr->SetFocus(); 
 
	//取标题 
	m_pDefaultCtr->GetWindowText(m_szTitle); 
 
	SetTimer(9, 10, NULL); 
 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CConfirmDialog::OnButtonSkip()  
{ 
	// TODO: Add your control notification handler code here 
	KillTimer(10); 
	CDialog::OnOK(); 
 
	//跳过 
	m_nOperator = 0; 
} 
 
void CConfirmDialog::OnButtonOverwrite()  
{ 
	// TODO: Add your control notification handler code here 
	KillTimer(10); 
	CDialog::OnOK(); 
 
	//覆盖 
	m_nOperator = 1; 
} 
 
void CConfirmDialog::OnButtonResume()  
{ 
	// TODO: Add your control notification handler code here 
	KillTimer(10); 
	CDialog::OnOK(); 
 
	//续传 
	m_nOperator = 2; 
} 
 
void CConfirmDialog::OnButtonRename()  
{ 
	// TODO: Add your control notification handler code here 
	KillTimer(10); 
	CDialog::OnOK(); 
 
	//更名 
	m_nOperator = 3; 
} 
 
void CConfirmDialog::OnTimer(UINT nIDEvent)  
{ 
	// TODO: Add your message handler code here and/or call default 
	if(nIDEvent==9) 
	{ 
		KillTimer(9); 
 
		if(m_pDefaultCtr) 
			m_pDefaultCtr->SetFocus(); 
	} 
	else 
	if(nIDEvent == 10) 
	{ 
		 
		// 10秒 
		if(m_nCount>=10) 
		{ 
			KillTimer(10); 
			 
			//执行默认操作 
			SendMessage(WM_COMMAND, m_pDefaultCtr->GetDlgCtrlID()); 
		} 
		else 
		{ 
			//计数器 
			m_nCount ++; 
 
			//重新设置标题 
			if(m_nCount>0) 
			{ 
				CString szTitle; 
				szTitle.Format("%s = %d", (LPCTSTR)m_szTitle, m_nCount); 
				m_pDefaultCtr->SetWindowText(szTitle); 
			} 
		} 
	} 
	else 
		CDialog::OnTimer(nIDEvent); 
} 
 
void CConfirmDialog::OnCancel()  
{ 
	// TODO: Add extra cleanup here 
	KillTimer(10); 
 
	//if(AfxMessageBox("这将要取消所有的上传/下载任务,你真的要取消吗?", 
	if(AfxMessageBox("This will cancel all transfer task, are sure want to continue?", 
		MB_OK|MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1)==IDYES) 
		CDialog::OnCancel(); 
	else 
		SetTimer(10, 1000, NULL); 
} 
 
void CConfirmDialog::OnDestroy()  
{ 
	CDialog::OnDestroy(); 
	 
	// TODO: Add your message handler code here 
	CStatic * pStaticLocal = (CStatic*)GetDlgItem(IDC_STATIC_LOCAL); 
	if(pStaticLocal) 
		pStaticLocal->SetIcon(NULL); 
 
	CStatic * pStaticRemote = (CStatic*)GetDlgItem(IDC_STATIC_REMOTE); 
	if(pStaticRemote) 
		pStaticRemote->SetIcon(NULL); 
}