Callback vs. Anzeige im Dialog
-
Hiho,
nach viel Sucherei habe ich ein Beispiel zu URLDownloadToFile gefunden.
Da interessiert mich besonders die Callback-Function im letzten Parameter.Es handelt sich dabei ja um eine eigene Klasse, soweit ich das bisher
verstanden habe. Innerhalb der Callback kann ich auch den Fortschritt des
Download ausgeben, allerdings ist mir absolut schleierhaft, wie ich, sobald
die callback läuft einen Dialog damit aktualisieren/versorgen kann.Meinen nicht modalen Dialog sperrt der Arbeitsablauf der Callback-Funktion

Ich habe es so versucht, dass ich erst den nicht modalen Dialog anzeige,
dann URLDownloadToFile mit callback rufe und innerhalb der Callback in
OnProgress(...) die nicht modale Dialogfunktion aufrufe, die den Dialog
dann mit SetDlgItemText(...) updaten soll.Boah..ich hoffe irgendjemand versteht diesen Kauderwelsch oder kann es
mir erklären, wie ichs richtig hinbekomme. Callback war bis dato ein
unbekannter Begriff für mich
MyCallback pCallback; hr = URLDownloadToFile ( NULL, m_editURL, m_editFile, 0, &pCallback // ptr auf callback );Die Callback:
class MyCallback : public IBindStatusCallback { public: MyCallback() {} ~MyCallback() { } // This one is called by URLDownloadToFile STDMETHOD(OnProgress)(/* [in] */ ULONG ulProgress, /* [in] */ ULONG ulProgressMax, /* [in] */ ULONG ulStatusCode, /* [in] */ LPCWSTR wszStatusText) { CString hg; hg.Format("%i",ulProgress);//totale größe in bytes download f; //download ist klasse vom dialog IDD_DIALOG1 f.updater(hg); //updater ist eine Funktion der download-klasse und ruft dort SetDlgItemText(...) //.... }
-
Ich habe es jetzt noch anders versucht...
Mit SetDlgItemText wird zwar die Änderung in den nicht modalen Dialog
geschrieben, aber irgendwann wird dieser dann (zusammen mit der Hauptanwendung)
komplett weiss...und man sieht nichts mehr, bis der Download fertig ist
CString hg; hg.Format("%i",ulProgress);//totale größe in bytes HWND m_hWnd = ::FindWindow(NULL,"Status"); ::SetDlgItemText(m_hWnd,IDC_DOWNLOAD,hg);
-
Hat denn niemand eine Idee dazu?
-
Der Dialog bleibt blockiert. Geht nicht anders!