class DownloadDelegate: public IBindStatusCallback { public: HWND m_hMainWnd; DownloadDelegate(HWND hWnd) : m_hMainWnd(hWnd) {} STDMETHOD(OnProgress)(ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) { if (ulProgressMax == 0) ulProgressMax = 1; _stprintf(szTipInfo, _T("正在下载文件...%d%%"), ulProgress * 100 / ulProgressMax); SendMessage(m_hMainWnd, SHOW_SUBTITLE_OWN_TYPE_MSG, (WPARAM)-2, (LPARAM)szTipInfo); return S_OK; } 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); 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; } // IUnknown methods. Note that IE never calls any of these methods, since // the caller owns the IBindStatusCallback interface, so the methods all // return zero/E_NOTIMPL. STDMETHOD_(ULONG,AddRef)() { return 0; } STDMETHOD_(ULONG,Release)() { return 0; } STDMETHOD(QueryInterface)( /* [in] */ REFIID riid, /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject) { return E_NOTIMPL; } }; DownloadDelegate DLStatus(m_hMainWnd); if (S_OK != URLDownloadToFile(NULL, str_temp_url.c_str(), strProfileFolder, 0, &DLStatus)) return FALSE;