Ściąganie pliku z internetu + progress bar

0

Szukam jakiegoś prostego sposobu na ściągania plików z internetu, który na bieżąco wyświetlałby mi ilość ściągniętych bajtów. Najlepiej jakby ktoś polecił mi jakaś gotową klase, której mogłbym użyć.

Póki co wziąłem się za funkcje URLDownloadToFile z MSDN i rzeczywiście ściaga mi ona plik jednak nie potrafie zmusić jej do wyświetlania mi postępu. Wiem, że ostatni argument tej funkcji powinien przechowywać wskaźnik do interfejsu IBindStatusCallback (ja go zastąpiłem przez NULL), który za pomocą komunikatu (??) IBindStatusCallback::OnProgress powinien informować mnie o postępie sciagania. Problem w tym, że nie mam pojęcia w jaki sposób zrobić to w praktyce :/

na razie mam tyle:

	  
bool http::download()
{
   typedef HRESULT (*P_URLDownloadToFile)(       
   LPUNKNOWN pCaller, 
   LPCTSTR szURL, 
   LPCTSTR szFileName, 
   DWORD dwReserved, 
   void* 
); 


   P_URLDownloadToFile _URLDownloadToFile; 
   HRESULT uRet = 1; 
   HINSTANCE hLib; 
   HMODULE urlmon=LoadLibrary("urlmon.dll"); 
   if(urlmon) 
   _URLDownloadToFile=(P_URLDownloadToFile)GetProcAddress(urlmon,"URLDownloadToFileA"); 


   uRet = _URLDownloadToFile(NULL,adres.c_str(),plik.c_str(),NULL,NULL); 
    
   if ( uRet == S_OK )
   {
   	  	success=true;
   	  	FreeLibrary(hLib); 
   	  	return true;
   }
   else 
   {
   		success=false;
   		FreeLibrary(hLib); 
   		return false; 
    }
  
}

Prosze o pomoc w użyciu IBindStatusCallback lub jak już wspomniałem na początku o podsuwanie gotowych klas.

0
class MyBindStatusCallback : public IBindStatusCallback
{
public:
 HRESULT OnProgress(      
    ULONG ulProgress,
    ULONG ulProgressMax,
    ULONG ulStatusCode,
    LPCWSTR szStatusText
  )
  {
    cout << ulProgress << "/" << ulProgressMax << "\n";
  }
}

_URLDownloadToFile(NULL,adres.c_str(),plik.c_str(),NULL, new MyBindStatusCallback);

Tylko musisz przechowywac gdzies ten wzkaznik zeby to potem zwolnic i pewnie musisz zaimplementowac pozostale metody interfejsu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1