📄 httpdownload.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 + -