windows API 菜鸟学习之路(四)

昨天说今天写一个Windows下载器的,早上一上午的选修课,逃不掉,现在的老师基本上都点名,悲剧啊········

进入正题吧,

写好的东西下面是截图

windows API 菜鸟学习之路(四)_第1张图片

 

 

昨天的进度条可能会卡死,但是可以调用线程解决。今天的代码里面会涉及就不再详细讲解了

进入今天的正题

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编程不熟悉,导致下载了之后文件大小还是没有变化!

 

你可能感兴趣的:(windows API 菜鸟学习之路(四))