QQ登录

只需一步,快速开始

175上位机VC MFC下载网络文件到指定目录

[ 复制链接 ]

175上位机VC MFC下载网络文件到指定目录

175上位机VC MFC下载网络文件到指定目录
175上位机VC MFC下载网络文件到指定目录
功能展示
从网络下载一些资源文件是再常见不过的事了,我们当前例程人实现从网络下载文件,保存到指定目录功能,点击下载后,开始下载且会显示下载进度,点击终止,停止下载,效果如图;
要点提示
从网络上下载文件可以用函数URLDownloadToFile(),函数的使用会有些繁琐,我们看下函数的原型
HRESULT URLDownloadToFile( LPUNKNOWN pCaller, LPCSTRszURL, LPCSTR szFileName, DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB );
pCaller //控件的接口,如果不是控件则为0.
szURL //要下载的url地址,不能为空.
szFileName //下载后保存的文件名
dwReserved //保留字段,必需为0
lpfnCB //下载进度状态回调
返回值有S_OK 下载成功 ;E_OUTOFMEMORY缓存区长度或内存空间不足; INET_E_DOWNLOAD_FAILURE指定资源或回调接口非法
实现功能
1.新建基于对话框的应用程序
2.拖拽一组合框用于显示要下载的文件ID为IDC_COMBO1;拖拽下载,停止下载按钮关联函数;拖拽进度条控件ID为IDC_PROGRESS1用于显示下载进度;
3.初始化组合框,添加些文件供下载测试
CComboBox* pCombox = (CComboBox*)GetDlgItem(IDC_COMBO1);//初始化组合框
pCombox->InsertString(0,"VC6.0"); pCombox->InsertString(0,"MSDN6.0");
pCombox->InsertString(0,"VC6.0助手"); pCombox->SetCurSel(0);
4.在程序退出时我们创建一个INI文件与写入下载地址到此文件,用于下载测试用
  1. void CGkbc8Dlg::OnDestroy()
  2. {
  3.         CDialog::OnDestroy();
  4. //><向文件写入数据        
  5.         char buf[MAX_PATH];
  6.         GetModuleFileName(NULL,buf,MAX_PATH);
  7.         CString sPath(buf);
  8.         sPath = sPath.Left(sPath.ReverseFind('\\')+1)+"工控编程吧.INI";
  9.         if(_access(sPath,00)==-1)
  10.         {
  11.                 ::CreateFile(sPath,GENERIC_WRITE|GENERIC_READ,
  12.                         FILE_SHARE_READ|FILE_SHARE_WRITE,
  13.                         NULL,
复制代码
  1.    CREATE_NEW,
  2.                         FILE_ATTRIBUTE_NORMAL,
  3.                         NULL);
  4.         }
  5.         ::WritePrivateProfileString("FILES","VC6.0","http://pcr4.pc6.com/rm/VC6.0.rar",sPath);
  6.         ::WritePrivateProfileString("FILES","VC6.0助手","http://down1.cr173.com/soft1/VC6.0_VA_X.zip",sPath);
  7.         ::WritePrivateProfileString("FILES","MSDN6.0","http://big2.pc6.com/big2/MSDNLibraryVisualStudio6.0.zip",sPath);
  8. }
复制代码
5.开始实现下载网络文件功能,下载按钮的函数为
  1. void CGkbc8Dlg::OnDownload()
  2. {
  3.         //开线程下载
  4.         CWinThread* pThread = AfxBeginThread(
  5.                                 ThreadFunc1,
  6.                                 this,
  7.                                 THREAD_PRIORITY_NORMAL,
  8.                                 0,
  9.                                 0);
  10.         ASSERT_VALID( pThread );
  11. }
复制代码
ThreadFunc1为线程一函数
  1. UINT ThreadFunc1( LPVOID lParam )
  2. {
  3.         CGkbc8Dlg* pParent = (CGkbc8Dlg*)lParam;
  4.         pParent->DownloadFile();
  5.         return 0;
  6. }
复制代码
DownloadFile()为添加的自定义函数
  1. void CGkbc8Dlg::DownloadFile()
  2. {
  3.         CComboBox* pCombox = (CComboBox*)GetDlgItem(IDC_COMBO1);
  4.         CString sKey;
  5.         pCombox->GetWindowText(sKey);
  6.         //
  7.         char buf[MAX_PATH];
  8.         GetModuleFileName(NULL,buf,MAX_PATH);
  9.         CString sPath(buf);//参数文件地址
  10.         sPath = sPath.Left(sPath.ReverseFind('\\')+1)+"工控编程吧.INI";
  11.         //
  12.         ::GetPrivateProfileString("FILES",sKey,"",buf,MAX_PATH,sPath);//获取下载地址
  13.         sPath = buf;
  14.         sPath = sPath.Right(sPath.GetLength()-sPath.ReverseFind('/')-1);//获得文件名
  15.         CString sSaveTo("D:\");
  16.         sSaveTo+=sPath;//获取保存路径

  17.         //开始下载
  18.         m_Download.SetParentWnd(this);
  19.         if(S_OK !=::URLDownloadToFile(NULL,buf,sSaveTo,0,&m_Download)&&m_Download.GetStopState())//UI会阻塞,建议开个线程
  20.                 AfxMessageBox("Failed Download");
  21. }
复制代码
m_Download为自定义类变量CBindCallbackm_Download; ,类的文件代码过长,可以从例程复制
终止下载按钮函数
  1. void CGkbc8Dlg::OnStop()
  2. {
  3.         m_Download.Stop();        
  4. }
复制代码
最后是下载的进度显示函数void SetDownloadProgress(ULONG ulProgress, ULONGulProgressMax,ULONG ulSatusCode,LPCWSTR szStatusText);
我们来演示整个功能实现过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:175.上位机VC MFC下载网络文件到指定目录.rar 
文件大小:128.31 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索