URLDownloadToCacheFile下载如何做进度显示?

XLEdoo 2009-07-29 11:51:22
URLDownloadToCacheFile或者URLDownloadToFile这两个函数如何在下载时做进度条呀?

在网上查了不少资料,是可以的,但是没有详细的东西,希望高手指点,希望不要光给一网址什么的。

能给出简单示范的追分!

另,我下载了一份urlfile的源码,是可以实现的,但是没看太懂,有没有更简单直观一点的?
...全文
205 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪影 2009-07-30
  • 打赏
  • 举报
回复
class CBindCBHttpNego : public IBindStatusCallback, public IHttpNegotiate

{
public:
DWORD m_cRef;
CBindCBHttpNego() : m_cRef(1) {}

virtual ~CBindCBHttpNego() {}

// IBindStatusCallback methods.

STDMETHOD(OnStartBinding)(
/* [in] */ DWORD dwReserved,
/* [in] */ IBinding __RPC_FAR *pib)
{ return E_NOTIMPL; }



STDMETHOD(GetPriority)(
/* [out] */ LONG __RPC_FAR *pnPriority)
{ return E_NOTIMPL; }


STDMETHOD(OnLowResource)(
/* [in] */ DWORD reserved)
{ return E_NOTIMPL; }

STDMETHOD(OnProgress)(
/* [in] */ ULONG ulProgress,
/* [in] */ ULONG ulProgressMax,
/* [in] */ ULONG ulStatusCode,
/* [in] */ LPCWSTR wszStatusText)
{ return E_NOTIMPL; } //在这里实现进度条的更新



STDMETHOD(OnStopBinding)(
/* [in] */ HRESULT hresult,
/* [unique][in] */ LPCWSTR szError)
{ return E_NOTIMPL; }

STDMETHOD(GetBindInfo)(
/* [out] */ DWORD __RPC_FAR *grfBINDF,
/* [unique][out][in] */ BINDINFO __RPC_FAR *pbindinfo)
{ return E_NOTIMPL; }

STDMETHOD(OnDataAvailable)(
/* [in] */ DWORD grfBSCF,
/* [in] */ DWORD dwSize,
/* [in] */ FORMATETC __RPC_FAR *pformatetc,
/* [in] */ STGMEDIUM __RPC_FAR *pstgmed)
{ return E_NOTIMPL; }

STDMETHOD(OnObjectAvailable)(
/* [in] */ REFIID riid,
/* [iid_is][in] */ IUnknown __RPC_FAR *punk)
{ return E_NOTIMPL; }

// IHttpNegotiate methods

STDMETHODIMP BeginningTransaction(/* [in] */ LPCWSTR szURL,
/* [unique][in] */ LPCWSTR szHeaders,
/* [in] */ DWORD dwReserved,
/* [out] */ LPWSTR __RPC_FAR *pszAdditionalHeaders);



STDMETHODIMP OnResponse(/* [in] */ DWORD dwResponseCode,
/* [unique][in] */ LPCWSTR szResponseHeaders,
/* [unique][in] */ LPCWSTR szRequestHeaders,
/* [out] */ LPWSTR __RPC_FAR *pszAdditionalRequestHeaders)
{ return E_NOTIMPL; }

// IUnknown methods.

// @Note that IE never calls any of these methods, since the caller owns the IBindStatusCallback interface
STDMETHOD_(ULONG,AddRef)() { return m_cRef++; }
STDMETHOD_(ULONG,Release)() { if (--m_cRef == 0) { delete this; return 0; } return m_cRef; }
STDMETHOD(QueryInterface)(
/* [in] */ REFIID riid,
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
{
*ppvObject = NULL;
if (riid==IID_IUnknown || riid==IID_IBindStatusCallback)
{
*ppvObject = (IBindStatusCallback*)this;
AddRef();
return S_OK;
}
else if (riid==IID_IHttpNegotiate)
{
*ppvObject = (IHttpNegotiate*)this;
AddRef();
return S_OK;
}
else

{
return E_NOINTERFACE;
}
}
};
雪影 2009-07-30
  • 打赏
  • 举报
回复
URLDownloadToCacheFile或者URLDownloadToFile这两个函数调用的关键是要实现IBindStatusCallback接口。
函数内部会调用IBindStatusCallback接口中的函数。
其中重载IBindStatusCallback::OnProgress就可知道下载的进度,在这个函数内部实现你的进度条更新。

一下是一个IBindStatusCallBack的封装例子,可参考一下
http://www.utblog.com/plog/1/article/1203
XLEdoo 2009-07-30
  • 打赏
  • 举报
回复
为什么我写的类在实例化时就出错?

error LNK2019: 无法解析的外部符号 "public: __thiscall CBSCallbackImpl::CBSCallbackImpl(void)" (??0CBSCallbackImpl@@QAE@XZ),该符号在函数 "public: static unsigned int __cdecl CXUpdateDlg::Download(void *)" (?Download@CXUpdateDlg@@SAIPAX@Z) 中被引用
s393658806 2009-07-30
  • 打赏
  • 举报
回复

mark
XLEdoo 2009-07-30
  • 打赏
  • 举报
回复
是不是要自己写一个类来继承IBindStatusCallback,
然后重新实现CBSCallbackImpl的OnProgress方法呢?
源码链接: https://pan.quark.cn/s/4059260b3dc9 在电子设计自动化(EDA)范畴内,Verilog作为一项关键的硬件描述语言(HDL),被普遍应用于构建数字系统的模型,其应用范围涵盖从基础的逻辑门构造到高级的系统级设计,例如本案例所探讨的电梯系统。运用Verilog进行的电梯系统构建是一个典型的综合实践任务,它融合了数字逻辑、嵌入式系统以及计算机工程等多个核心知识领域。 我们必须明确电梯系统的功能要求。电梯需依据乘客的楼层指令,智能地选择其运行路径、选择停靠的楼层以及安排门的开启流程。这一过程涉及到状态机的设计,这是Verilog编程中的一个核心概念。状态机能够将电梯的操作流程划分为多个独立的状态,例如待机、上行、下行、开门、关门等,通过状态间的转换条件来执行各类操作。 Verilog程序通常由多个模块构成,每个模块对应电路的一部分。在此项目中,可能包含以下模块:主控制单元模块、楼层识别模块、按键输入单元模块、电机驱动模块等。各模块均具备特定的功能,例如主控制单元负责统筹各部分的工作,而电机驱动模块则依据指令操控电梯的升降动作。 在构建电梯系统时,还需关注实时性和同步性。例如,电梯不允许在两个楼层同时开启门,这需要在Verilog程序中运用适当的同步手段,例如边沿触发的时钟信号,以确保数据传输的精确性与统一性。 接下来是仿真环节和验证步骤。借助ModelSim或Vivado这类软件工具,我们可以对Verilog程序进行仿真,模拟电梯的操作情形,考察其在不同情境下的表现是否符合设计预期。此步骤极为关键,有助于识别并修正设计中的缺陷。 倘若设计满足所有条件,可将Verilog程序编译并上传至FPGA(现场可编程门阵列)进行硬件层...
内容概要:本文基于Simulink平台,构建了一个包含风能、太阳能、储能系统和质子交换膜(PEM)电解水制氢系统并网运行的交流母线协调仿真模型。该模型旨在研究多种能源形式与制氢负荷在共用交流母线下的协调运行机制,重点分析风光出力波动性对系统稳定性的影响,以及储能与制氢负荷在能量调节和消纳富余可再生能源方面的作用。通过设计合理的控制策略,实现系统内功率的动态平衡与高效利用,并对系统在不同工况下的动态响应特性进行了仿真验证,为高比例可再生能源接入背景下风光储氢一体化系统的规划与运行提供了技术参考。; 适合人群:具备一定电力系统、新能源或自动化专业背景,从事相关领域研究或工程应用的研发人员及高年级本科生、研究生。; 使用场景及目标:①研究风光储氢多能互补系统的集成与协调控制策略;②分析储能与电解制氢负荷在平抑可再生能源波动、提升系统稳定性方面的作用;③掌握基于Simulink的多能源系统建模仿真方法,服务于科研项目、毕业设计或工程预研。; 阅读建议:建议结合Simulink软件动手复现模型,重点关注各单元模块的控制逻辑与接口设计,通过调整参数和工况进行对比仿真,深入理解系统动态特性与协调运行机理。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧