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

📄 downloaddlg.cpp

📁 多线程下载工具可支持http,ftp,https多协议....vc编写
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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);

⌨️ 快捷键说明

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