昨天说今天写一个Windows下载器的,早上一上午的选修课,逃不掉,现在的老师基本上都点名,悲剧啊········
进入正题吧,
写好的东西下面是截图
昨天的进度条可能会卡死,但是可以调用线程解决。今天的代码里面会涉及就不再详细讲解了
进入今天的正题
void CProgress_02Dlg::OnOK()
{
// TODO: Add extra validation here
//CDialog::OnOK();
HANDLE hrhread; //线程句柄
DWORD lppara = 1 , lpid;
hrhread = CreateThread( 0 , 0 , downs , &lppara , 0 , &lpid); 创建新的线程 downs下载函数
UpdateData(true);
}
这个基本上都因该看得懂就不详解了
DWORD WINAPI downs(LPVOID lppara)
{
CString kks;//获取IDC_EDIT_URL的变量
CWnd *pwnd = AfxGetMainWnd();//获取窗口指针
CProgressCtrl *ps = (CProgressCtrl *)pwnd->GetDlgItem(IDC_PROGRESS1);
CInternetSession netsession;
char buffer[512];
CStdioFile *sfile;
pwnd->GetDlgItemText(IDC_EDIT_URL , kks);//获取网址
sfile = netsession.OpenURL(kks , 1 , INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_RELOAD );
CFile filename(sfile->GetFileName(), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
int bit;
int pos = sfile->SeekToEnd();//获取文件尾的指针
sfile->SeekToBegin();//获取开头的指针
ps->SetRange( 0 , pos);
pos =0 ;
while (bit = sfile->Read(buffer , 512)) //读取文件大小
{
pos += bit;
ps->SetPos(pos); //设置进度条位置
filename.Write(buffer , bit); //写入本地文件
}
return 0;
}
红色部分是winnet相关的部分,现在不解释
以后详解。
我在学校的网速快,下载一下子就下载完了,但是下载的文件大小变化的很慢。不知道为什么。
本次受了不少挫折,用线程的时候出现了很多问题,主要是自己不够熟悉。
还有一个就是对internet编程不熟悉,导致下载了之后文件大小还是没有变化!