📄 downloaddlg.cpp
字号:
//根据协议不同 调用不同的开始任务函数
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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -