www.pudn.com > download.rar > downloadDlg.cpp


// downloadDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "download.h" 
#include "downloadDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CAboutDlg dialog used for App About 
 
class CAboutDlg : public CDialog 
{ 
public: 
	CAboutDlg(); 
 
// Dialog Data 
	//{{AFX_DATA(CAboutDlg) 
	enum { IDD = IDD_ABOUTBOX }; 
	//}}AFX_DATA 
 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CAboutDlg) 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support 
	//}}AFX_VIRTUAL 
 
// Implementation 
protected: 
	//{{AFX_MSG(CAboutDlg) 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
	//{{AFX_DATA_INIT(CAboutDlg) 
	//}}AFX_DATA_INIT 
} 
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAboutDlg) 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
	//{{AFX_MSG_MAP(CAboutDlg) 
		// No message handlers 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDownloadDlg dialog 
 
CDownloadDlg::CDownloadDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CDownloadDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDownloadDlg) 
	m_strURL = _T(""); 
	m_strSaveas = _T(""); 
	m_strPass = _T(""); 
	m_strUser = _T(""); 
	m_size = 0; 
	m_finished = 0; 
	m_nParts = 1; 
	m_speed = 0; 
	m_s=0; 
	i=0; 
	//}}AFX_DATA_INIT 
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
	m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); 
} 
 
void CDownloadDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDownloadDlg) 
	DDX_Control(pDX, IDC_SPIN, m_Spin); 
	DDX_Text(pDX, IDC_EDIT_URL, m_strURL); 
	DDX_Text(pDX, IDC_EDIT_SAVEAS, m_strSaveas); 
	DDX_Text(pDX, IDC_EDIT_PASSWORD, m_strPass); 
	DDX_Text(pDX, IDC_EDIT_USER, m_strUser); 
	DDX_Text(pDX, IDC_EDIT_SIZE, m_size); 
	DDX_Text(pDX, IDC_EDIT_FINISHED, m_finished); 
	DDX_Text(pDX, IDC_EDIT_PARTS, m_nParts); 
	DDX_Text(pDX, IDC_EDIT_SPEED, m_speed); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CDownloadDlg, CDialog) 
	//{{AFX_MSG_MAP(CDownloadDlg) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_BN_CLICKED(IDC_BUTTON_SAVEAS, OnButtonSaveas) 
	ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart) 
	ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit) 
	ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel) 
	ON_WM_TIMER() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDownloadDlg message handlers 
 
BOOL CDownloadDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	// Add "About..." menu item to system menu. 
 
	// IDM_ABOUTBOX must be in the system command range. 
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 
	ASSERT(IDM_ABOUTBOX < 0xF000); 
 
	CMenu* pSysMenu = GetSystemMenu(FALSE); 
	if (pSysMenu != NULL) 
	{ 
		CString strAboutMenu; 
		strAboutMenu.LoadString(IDS_ABOUTBOX); 
		if (!strAboutMenu.IsEmpty()) 
		{ 
			pSysMenu->AppendMenu(MF_SEPARATOR); 
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 
		} 
	} 
 
	// Set the icon for this dialog.  The framework does this automatically 
	//  when the application's main window is not a dialog 
	SetIcon(m_hIcon, TRUE);			// Set big icon 
	SetIcon(m_hIcon, FALSE);		// Set small icon 
	 
	// TODO: Add extra initialization here 
	((CSpinButtonCtrl*)GetDlgItem(IDC_SPIN))->SetRange(1,10); 
	m_Spin.SetBuddy(GetDlgItem(IDC_EDIT_PARTS)); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS2))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS3))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS4))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS5))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS6))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS7))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS8))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS9))->SetRange(0,1000); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS10))->SetRange(0,1000); 
	 
	 
	return TRUE;  // return TRUE  unless you set the focus to a control 
} 
 
void CDownloadDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
// If you add a minimize button to your dialog, you will need the code below 
//  to draw the icon.  For MFC applications using the document/view model, 
//  this is automatically done for you by the framework. 
 
void CDownloadDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // device context for painting 
 
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 
 
		// Center icon in client rectangle 
		int cxIcon = GetSystemMetrics(SM_CXICON); 
		int cyIcon = GetSystemMetrics(SM_CYICON); 
		CRect rect; 
		GetClientRect(&rect); 
		int x = (rect.Width() - cxIcon + 1) / 2; 
		int y = (rect.Height() - cyIcon + 1) / 2; 
 
		// Draw the icon 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
	} 
} 
 
// The system calls this to obtain the cursor to display while the user drags 
//  the minimized window. 
HCURSOR CDownloadDlg::OnQueryDragIcon() 
{ 
	return (HCURSOR) m_hIcon; 
} 
 
 
 
/*Dlg类中的函数主要是针对界面的借口,处理界面变量以及信息显示等*/ 
 
 
void CDownloadDlg::OnButtonSaveas() //保存为 按钮的响应函数 
{ 
	UpdateData(TRUE); 
	  
	//从下载地址获取文件名,在以后的代码中n通常是代表位置 
	m_strURL.TrimLeft(); 
	m_strURL.TrimRight(); 
	int n = m_strURL.ReverseFind('/'); 
	if(n==-1) AfxMessageBox("URL错误,请确认地址正确"); 
	CString temp = m_strURL.Mid(n+1); 
	n = temp.Find('?'); 
	if(n != -1) 
	{ 
      temp=temp.Left(n); 
	} 
 
	//获得保存地址 
	m_strSaveas.Empty(); 
	CFileDialog dlg(FALSE,NULL,temp); 
	if(dlg.DoModal()==IDOK) { 
		m_strSaveas=dlg.m_ofn.lpstrFile; 
        n=m_strSaveas.ReverseFind('\\'); 
		 
		m_strSaveas=m_strSaveas.Left(n+1); 
		m_strSaveas+=temp; 
	} 
	UpdateData(FALSE);	 
} 
 
void CDownloadDlg::OnButtonStart() //开始按钮的响应函数,进行一部分初始化并调用下载类中的函数 
{ 
	UpdateData(TRUE); 
	//i,j,m_s均为速度相关的变量, 
	i=0; m_s=0; j=0; 
 
	//先将线程进度隐藏,主要用于暂停后重新开始。 
	GetDlgItem(IDC_STATIC10)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS10)->ShowWindow(SW_HIDE); 
 
    GetDlgItem(IDC_STATIC9)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS9)->ShowWindow(SW_HIDE); 
 
    GetDlgItem(IDC_STATIC8)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS8)->ShowWindow(SW_HIDE); 
 
	GetDlgItem(IDC_STATIC7)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS7)->ShowWindow(SW_HIDE); 
 
	GetDlgItem(IDC_STATIC6)->ShowWindow(SW_HIDE); 
	GetDlgItem(IDC_PROGRESS6)->ShowWindow(SW_HIDE); 
 
	GetDlgItem(IDC_STATIC5)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS5)->ShowWindow(SW_HIDE); 
 
	GetDlgItem(IDC_STATIC4)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS4)->ShowWindow(SW_HIDE); 
 
	GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS3)->ShowWindow(SW_HIDE); 
 
	GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS2)->ShowWindow(SW_HIDE); 
 
	GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE); 
    GetDlgItem(IDC_PROGRESS1)->ShowWindow(SW_HIDE); 
    ((CProgressCtrl*)GetDlgItem(IDC_PROGRESS_Z))->SetRange(0,1000*m_nParts);//设置总进度范围      
     
	int n= m_strURL.Find("://"); 
    m_strProt=m_strURL.Left(n); 
	 
	 
	 
	//根据协议不同 调用不同的开始任务函数 
	if(m_strProt=="http"){ 
	   http.Begin(m_strURL,m_strSaveas,m_nParts); 
	   for(int i=0; i<10000;i++);//增加一个时间延迟,避免数据出错。 
	} 
	 
	if(m_strProt=="ftp"){ 
      if(m_strUser.IsEmpty()) m_strUser="anonymous"; 
	  if(m_strPass.IsEmpty()) m_strPass="youremail@youremail.com"; 
      ftp.Begin(m_strURL,m_strSaveas,m_nParts,m_strUser,m_strPass); 
	  for(int i=0; i<10000;i++); 
	} 
     
	if(m_strProt=="https"){ 
	   https.Begin(m_strURL,m_strSaveas,m_nParts); 
	   for(int i=0; i<10000;i++); 
	} 
 
	m_timer=SetTimer(1,100,NULL);//刷新界面的时间控件 
	 
	//按照用户选择的线程数显示进度条 
	switch(m_nParts) 
	{ 
	case 10: 
		GetDlgItem(IDC_STATIC10)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS10)->ShowWindow(SW_SHOW); 
	case 9: 
        GetDlgItem(IDC_STATIC9)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS9)->ShowWindow(SW_SHOW); 
	case 8: 
        GetDlgItem(IDC_STATIC8)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS8)->ShowWindow(SW_SHOW); 
	case 7: 
		GetDlgItem(IDC_STATIC7)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS7)->ShowWindow(SW_SHOW); 
	case 6: 
		GetDlgItem(IDC_STATIC6)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS6)->ShowWindow(SW_SHOW); 
	case 5: 
		GetDlgItem(IDC_STATIC5)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS5)->ShowWindow(SW_SHOW); 
	case 4: 
		GetDlgItem(IDC_STATIC4)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS4)->ShowWindow(SW_SHOW); 
	case 3: 
		GetDlgItem(IDC_STATIC3)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS3)->ShowWindow(SW_SHOW); 
	case 2: 
		GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS2)->ShowWindow(SW_SHOW); 
	case 1: 
		GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW); 
        GetDlgItem(IDC_PROGRESS1)->ShowWindow(SW_SHOW); 
	} 
} 
 
void CDownloadDlg::OnButtonExit()//退出按钮的响应函数,结束进程  
{ 
	if(m_strProt=="http"){ 
      for(int i = 0; i < m_nParts; i++){ 
		if(http.m_hThread[i] != NULL){ 
			CloseHandle(http.m_hThread[i]); 
			http.m_hThread[i] = NULL; 
		} 
	  } 
	} 
 
	if(m_strProt=="ftp"){ 
      for(int i = 0; i < m_nParts; i++){ 
		if(ftp.m_hThread[i] != NULL){ 
			CloseHandle(ftp.m_hThread[i]); 
			ftp.m_hThread[i] = NULL; 
		} 
	  } 
	} 
 
	if(m_strProt=="https"){ 
      for(int i = 0; i < m_nParts; i++){ 
		if(https.m_hThread[i] != NULL){ 
			CloseHandle(https.m_hThread[i]); 
			https.m_hThread[i] = NULL; 
		} 
	  } 
	} 
	CDialog::OnCancel(); 
} 
 
void CDownloadDlg::OnButtonCancel()//暂停按钮的响应函数,分别调用不同协议的暂停函数 
{ 
   	if(m_strProt=="http"){ 
       
		KillTimer(m_timer); 
		m_speed=0; 
		UpdateData(FALSE); 
		http.OnCancel(); 
 
	} 
 
	if(m_strProt=="ftp"){ 
        KillTimer(m_timer); 
		m_speed=0; 
		UpdateData(FALSE); 
		ftp.OnCancel(); 
	} 
	 
	if(m_strProt=="https"){ 
		KillTimer(m_timer); 
		m_speed=0; 
		UpdateData(FALSE); 
		https.OnCancel(); 
	} 
} 
 
 
void CDownloadDlg::OnTimer(UINT nIDEvent)//时间函数,每100毫秒刷新执行  
{ 
	i++;//速度计算时的计数变量 
	if(m_strProt=="http"){ 
		//进度条的显示 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(http.kk[0]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS2))->SetPos(http.kk[1]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS3))->SetPos(http.kk[2]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS4))->SetPos(http.kk[3]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS5))->SetPos(http.kk[4]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS6))->SetPos(http.kk[5]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS7))->SetPos(http.kk[6]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS8))->SetPos(http.kk[7]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS9))->SetPos(http.kk[8]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS10))->SetPos(http.kk[9]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS_Z))->SetPos(http.kk[0]+http.kk[1]+http.kk[2]+http.kk[3]+http.kk[4]+http.kk[5]+http.kk[6]+http.kk[7]+http.kk[8]+http.kk[9]); 
		 
		//文件大小与完成大小的显示 
		m_size=http.m_dwFileSize/1024; 
	    m_finished=(http.m_sum[0]+http.m_sum[1]+http.m_sum[2]+http.m_sum[3]+http.m_sum[4]+http.m_sum[5]+http.m_sum[6]+http.m_sum[7]+http.m_sum[8]+http.m_sum[9])/1024; 
		 
		//速度的计算,由于瞬间速度不稳定,所以采取3秒内的平均速度 
		if(m_finished>m_s&&i>=10) { 
			speed[j++]=m_finished-m_s; 
			m_s=m_finished; 
			if(j==3) { m_speed=(speed[0]+speed[1]+speed[2])/3; j=0;} 
			i=0; 
		} 
 
		UpdateData(FALSE); 
	} 
	 
	if(m_strProt=="ftp"){ 
        ((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(ftp.hh[0]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS2))->SetPos(ftp.hh[1]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS3))->SetPos(ftp.hh[2]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS4))->SetPos(ftp.hh[3]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS5))->SetPos(ftp.hh[4]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS6))->SetPos(ftp.hh[5]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS7))->SetPos(ftp.hh[6]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS8))->SetPos(ftp.hh[7]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS9))->SetPos(ftp.hh[8]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS10))->SetPos(ftp.hh[9]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS_Z))->SetPos(ftp.hh[0]+ftp.hh[1]+ftp.hh[2]+ftp.hh[3]+ftp.hh[4]+ftp.hh[5]+ftp.hh[6]+ftp.hh[7]+ftp.hh[8]+ftp.hh[9]); 
		 
		m_size=ftp.filesize/1024; 
		m_finished=(ftp.m_sum[0]+ftp.m_sum[1]+ftp.m_sum[2]+ftp.m_sum[3]+ftp.m_sum[4]+ftp.m_sum[5]+ftp.m_sum[6]+ftp.m_sum[7]+ftp.m_sum[8]+ftp.m_sum[9])/1024; 
		 
		if(m_finished>m_s&&i>=10) { 
			speed[j++]=m_finished-m_s; 
			m_s=m_finished; 
			if(j==3) { m_speed=(speed[0]+speed[1]+speed[2])/3; j=0;} 
			i=0; 
		} 
		UpdateData(FALSE); 
	} 
	 
	if(m_strProt=="https"){ 
		 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(https.ss[0]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS2))->SetPos(https.ss[1]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS3))->SetPos(https.ss[2]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS4))->SetPos(https.ss[3]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS5))->SetPos(https.ss[4]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS6))->SetPos(https.ss[5]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS7))->SetPos(https.ss[6]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS8))->SetPos(https.ss[7]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS9))->SetPos(https.ss[8]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS10))->SetPos(https.ss[9]); 
		((CProgressCtrl*)GetDlgItem(IDC_PROGRESS_Z))->SetPos(https.ss[0]+https.ss[1]+https.ss[2]+https.ss[3]+https.ss[4]+https.ss[5]+https.ss[6]+https.ss[7]+https.ss[8]+https.ss[9]); 
		 
		//文件大小与完成大小的显示 
		m_size=https.m_dwFileSize/1024; 
	    m_finished=(https.m_sum[0]+https.m_sum[1]+https.m_sum[2]+https.m_sum[3]+https.m_sum[4]+https.m_sum[5]+https.m_sum[6]+https.m_sum[7]+https.m_sum[8]+https.m_sum[9])/1024; 
		 
		//速度的计算,由于瞬间速度不稳定,所以采取3秒内的平均速度 
		if(m_finished>m_s&&i>=10) { 
			speed[j++]=m_finished-m_s; 
			m_s=m_finished; 
			if(j==3) { m_speed=(speed[0]+speed[1]+speed[2])/3; j=0;} 
			i=0; 
		} 
 
		UpdateData(FALSE); 
	} 
     
	if(m_finished>=m_size) {//下载完成时停止时间函数继续执行并对界面进行初始化 
 
	 KillTimer(m_timer); 
 
//	CString str; str.Format("%d---%d---%d",http.m_sum[1],http.m_sum[3],http.m_sum[6]); 
//	AfxMessageBox(str); 
     for(int i=0;i<10;i++){ 
			ftp.hh[i]=0; 
			ftp.m_sum[i]=0; 
			http.kk[i]=0; 
			http.m_sum[i]=0; 
			https.ss[i]=0; 
			https.m_sum[i]=0; 
		} 
 
    //隐藏线程进度条 
	switch(m_nParts) 
	{ 
	case 10: 
		GetDlgItem(IDC_STATIC10)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS10)->ShowWindow(SW_HIDE); 
	case 9: 
        GetDlgItem(IDC_STATIC9)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS9)->ShowWindow(SW_HIDE); 
	case 8: 
        GetDlgItem(IDC_STATIC8)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS8)->ShowWindow(SW_HIDE); 
	case 7: 
		GetDlgItem(IDC_STATIC7)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS7)->ShowWindow(SW_HIDE); 
	case 6: 
		GetDlgItem(IDC_STATIC6)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS6)->ShowWindow(SW_HIDE); 
	case 5: 
		GetDlgItem(IDC_STATIC5)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS5)->ShowWindow(SW_HIDE); 
	case 4: 
		GetDlgItem(IDC_STATIC4)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS4)->ShowWindow(SW_HIDE); 
	case 3: 
		GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS3)->ShowWindow(SW_HIDE); 
	case 2: 
		GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS2)->ShowWindow(SW_HIDE); 
	case 1: 
		GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE); 
        GetDlgItem(IDC_PROGRESS1)->ShowWindow(SW_HIDE); 
	} 
 
	//将一部分变量复零 
	m_nParts = 1; 
    m_strURL = _T(""); 
    m_strSaveas = _T(""); 
    m_strPass = _T(""); 
    m_strUser = _T(""); 
    m_size = 0; 
    m_finished = 0; 
	m_speed=0; 
	i=0; 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS2))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS3))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS4))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS5))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS6))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS7))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS8))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS9))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS10))->SetPos(0); 
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS_Z))->SetPos(0); 
	UpdateData(FALSE); 
	} 
	CDialog::OnTimer(nIDEvent); 
}