专用于下载到本地磁盘的同时显示进度条
使用本类,请先取得CHttpClient下载类
// HttpClientProcess.h: 专用于下载到本地磁盘的同时显示进度条 // //////////////////////////////////////////////////////////////////////
#if !defined(AFX_HTTPCLIENTPROCESS_H__) #define AFX_HTTPCLIENTPROCESS_H__
#include "HttpClient.h"
class CHttpClientProcess : public CHttpClient { public: CHttpClientProcess(); virtual ~CHttpClientProcess();
bool Download(char*url,char*fname,void* p); //p为进度条控件的指针 virtual void OnDataRecived(char* data,long datasize,int first = false ); private: CProgressCtrl* m_lpProcessBar; };
#endif
//------------------------------------------------------------------ // HttpClientProcess.cpp // //////////////////////////////////////////////////////////////////////
#include "stdafx.h" #include "HttpClientProcess.h"
CHttpClientProcess::CHttpClientProcess() { m_lpProcessBar=NULL; }
CHttpClientProcess::~CHttpClientProcess() {
} void CHttpClientProcess::OnDataRecived(char* data,long datasize,int first) { CHttpClient::OnDataRecived(data,datasize,first); if(!m_lpProcessBar)return;
if(first) { char buf[128]; memset(buf,0,128); GetHeader("Content-Length",buf); m_lpProcessBar->SetRange32(0,atol(buf)); m_lpProcessBar->SetPos(datasize); } else { m_lpProcessBar->SetPos(m_lpProcessBar->GetPos()+datasize); } }
bool CHttpClientProcess::Download(char *url, char *fname, void *p) { m_lpProcessBar=(CProgressCtrl*)p; return CHttpClient::Download(url,fname); }

|