⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpdownload.h

📁 模拟迅雷的下载工具软件
💻 H
字号:
#if !defined(AFX_HTTPDOWNLOAD_H__0BCB2801_6241_11D9_BFD9_00E04CB2B956__INCLUDED_)
#define AFX_HTTPDOWNLOAD_H__0BCB2801_6241_11D9_BFD9_00E04CB2B956__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// HttpDownLoad.h : header file
//作者:孟庆远

/////////////////////////////////////////////////////////////////////////////
// CHttpDownLoad window

#include "LRegistry.h"

typedef struct tagLEOSOCKET_TYPE{
	CString    strAcceptType;  //接收数据类型:*/*
	CString    strServer;      //保存服务器名:www.xxx.xxx
	int        nTimeOut;       //Socket超时设置
}LEOSOCKET_TYPE;


typedef struct tagLEODOWN_INFO{
	CString    strFilePath;          //文件绝对路径 
	CString    strAutoFilePath;      //自动更名后的路径
	CString    strComment;           //链接的提示信息
	CString    strLocationUrl;       //下载文件的网址
	CString    strRegSubPath;        //注册表路径
	float      fPercent;             //百分比数 100%
	float      fSpeed;               //下载速率 30kb/s
	long       lFileLength;          //文件长度
	long       lFromeByte;           //开始长度*
	long       lToByte;              //结束长度*
	long       lBreakPointByte;      //断点开始长度*
	int        nSvrState;            //服务器状态值
	int        nSocketLinkNum;       //测试Socket连接次数
	int        nPID;                 //主线程号
	int        nCID;                 //子线程号(0~4)
	int        nBreakRev;            //1:以前没有完成的任务 or 0:新任务 
	int        nImage;               //图示类型共3种
	BOOL       bIsFileDown;          //文件是否下载完
	BOOL       bRename;              //自动更名
	CWnd       *the;                 //CHttpDownLoad指针
	CWnd       *pMainFrame;          //CMainFrame指针
	LEOSOCKET_TYPE stSocketType;     //LEOSOCKET_TYPE结构变量
}LEODOWN_INFO;


typedef struct tagFILEDIALOG_INFO{
	CString    strFilePath;          //文件绝对路径
	CString    strComment;           //链接提示信息
	CString    strLocationUrl;       //下载文件的网址
	CString    strRegSubPath;        //注册表路径
	BOOL       bRename;              //自动更名
	int        nSocketLinkNum;       //测试Socket连接次数
	int        nPID;                 //主线程号
	int        nBreakRev;            //1:以前没有完成的任务 or 0:新任务 
	int        nImage;               //图示类型共3种
	CWnd       *pMainFrame;          //CMainFrame指针
}FILEDIALOG_INFO;
typedef struct tagWRITEREGLISTCTRL_DATA{
	CString strFilePath;      //文件绝对路径
	CString strRegPath;       //注册表路径
	CString strComment;       //链接提示信息
	CString strLocationUrl;   //下载文件的网址
	int     nPID;             //主线程号
	int     nItem;            //列表框行号初始为:0
	int     nImage;           //图示类型共3种
	long    nLength;          //文件长度
}WRITEREGLISTCTRL_DATA;
typedef struct tagMAIN_REGPARAM{
	CString strFilePath;      //文件绝对路径
	CString strRegPath;       //注册表路径
	CString strComment;       //链接提示信息
	CString strLocationUrl;   //下载文件的网址
	int     nPID;             //主线程号
	int     nItem;            //列表框行号初始为:0
	int     nImage;           //图示类型共3种
	long    nLength;          //文件长度
}MAIN_REGPARAM;
typedef struct tagHTTPDL_INFO{
	struct BREAK_INFO0{
		   long  BreakLength0;      //断点开始长度
		   long  lFromeByte;        //开始长度*
	       long  lToByte;           //结束长度*
		   float lSpeed0;           //0线程下载速率
		   int   nCID;              //子线程号 
		   BOOL  bRevData0;         //子线程是否下载完毕
		   BOOL  bSpeed;            //子线程是否已经有了速率数
	}BreakInfo0;
	struct BREAK_INFO1{
		   long  BreakLength1;
		   long  lFromeByte;           
	       long  lToByte;              
		   float lSpeed1;
		   int   nCID;    
		   BOOL  bRevData1;
		   BOOL  bSpeed;
	}BreakInfo1;
	struct BREAK_INFO2{
		   long  BreakLength2;
		   long  lFromeByte;           
	       long  lToByte;              
		   float lSpeed2;
		   int   nCID;   
		   BOOL  bRevData2;
		   BOOL  bSpeed;
	}BreakInfo2;
	struct BREAK_INFO3{
		   long  BreakLength3;
		   long  lFromeByte;      
	       long  lToByte;         
		   float lSpeed3;
		   int   nCID;    
		   BOOL  bRevData3;
		   BOOL  bSpeed;
	}BreakInfo3;
	struct BREAK_INFO4{
		   long  BreakLength4;
		   long  lFromeByte;       
	       long  lToByte;          
		   float lSpeed4;
		   int   nCID;    
		   BOOL  bRevData4;
		   BOOL  bSpeed;
	}BreakInfo4;
	long  lFileLength;    //文件长度
	float fSpeed;         //下载速率
	BOOL  bSpeed;
	CString  strRegPath;  //注册表路径
}HTTPDL_INFO;

typedef struct tagMAIN2_REGPARAM{
	int      nItem;        //列表框行号初始为:0
	CString  strRegPath;   //注册表路径
}MAIN2_REGPARAM;
typedef struct tagTIME_BEGIN{
	int      nPID;                  //主线程号
	int      nItem;                 //列表框行号初始为:0
	int      nHH;                   //小时hh:mm:ss
	int      nMM;                   //分钟
	int      nSS;                   //钞
    int      nStartDownLoadNum;     //StartDownLoad()号
	CString  strRegPath;            //注册表路径
	CWnd     *the;                  //CHttpDownLoad指针
}TIME_BEGIN;
typedef struct tagTIME_LIST{
	int      nPID;              //主线程号
	int      nItem;             //列表框行号初始为:0
	int      eHH;               //小时hh:mm:ss
	int      eMM;               //分钟
	int      eSS;               //钞
	CString  strRegPath;        //注册表路径
	CWnd     *the;              //CHttpDownLoad指针
}TIME_LIST;
typedef struct tagLIST_VIEWDATA{
	int nItem;           //列表框行号初始为:0
	int nColumn;         //列表框列号初始为:0
	LPCTSTR lpcszText;   //列表框数据
}LIST_VIEWDATA;
typedef struct tagCAULUETIMER_DATA{
	char szTimer[9];     //用于存放时间格式:hh:mm:ss
	int  nItem;          //列表框行号初始为:0
}CAULUETIMER_DATA;

//----------以下消息的接收函数定义在CMainFrame中----------
#define WM_TESTLIST         WM_USER+119   //用于输出服务器反回数据:OnTestList
#define WM_WRITEREG2        WM_USER+121   //用于向列表框输出数据:OnWriteReg2
#define WM_WRITEREGMAIN     WM_USER+122   //用于重新写入列表框数据,如果为"1"加入工具提示:OnWriteRegMain
#define WM_WRITELISTDATA    WM_USER+125   //用于向列表框写入数据:OnWriteListData
#define WM_WRITEREGLISTCTRL WM_USER+127   //用于向列表框写入数据:OnWriteRegListCtrl
#define WM_CAULUETIMER      WM_USER+128   //用于向列表框写入时间数据:OnCaulueTimer
#define WM_DECRSETHNUM      WM_USER+129   //将CMainFrame中的m_nThreadNumber变量减一,用于去掉工具提示中已经完成的任务提示:OnDecreaseThNum

UINT StartHttpDownLoad(void *lParam);  //主下载线程


class CHttpDownLoad : public CWnd
{
// Construction
public:
	CHttpDownLoad();
	CHttpDownLoad(void *lParam);

// Attributes
public:
	CWnd *m_pMainFrame;
	LEODOWN_INFO m_stLeoDownInfo;
	HTTPDL_INFO  m_stHttpDlInfo;
	TIME_BEGIN   m_stTimeBegin;  //下载时用的总时间
	TIME_LIST    m_stTimeList;   //下载时剩余的时间

	BOOL m_bIsEndThe;            //为真,准备结束主线程
	BOOL m_bIsAfxBegin5Thread0;  //为真,证明0号子线程正在运行(在强制停止下载任务时用到此变量)
	BOOL m_bIsAfxBegin5Thread1;  //为真,证明1号子线程正在运行(在强制停止下载任务时用到此变量)
	BOOL m_bIsAfxBegin5Thread2;  //为真,证明2号子线程正在运行(在强制停止下载任务时用到此变量)
	BOOL m_bIsAfxBegin5Thread3;  //为真,证明3号子线程正在运行(在强制停止下载任务时用到此变量)
	BOOL m_bIsAfxBegin5Thread4;  //为真,证明4号子线程正在运行(在强制停止下载任务时用到此变量)

	HANDLE m_MulHand[5];         //5个子线程的句柄(在强制停止下载任务时用到这些句柄)

// Operations
public:
	void SetTimerBegin(UINT nEvent);    //设置计时开始函数
	void KillTimerEnd(int nEvent);      //销毁计时器函数
	void SetThreadEnd(BOOL nEnd=TRUE);  //调置主线程结束函数

	void SetLeoDownInfo(LEODOWN_INFO lParam,CWnd *pMainFrame);  //调置初始变量(一般不用)
	LEODOWN_INFO GetLeoDownInfo();   //获得m_stLeoDownInfo结构变量

	UINT EndSelf();
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CHttpDownLoad)
	//}}AFX_VIRTUAL

// Implementation
public:
	virtual ~CHttpDownLoad();

	// Generated message map functions
protected:
	//{{AFX_MSG(CHttpDownLoad)
	afx_msg void OnTimer(UINT nIDEvent);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_HTTPDOWNLOAD_H__0BCB2801_6241_11D9_BFD9_00E04CB2B956__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -