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!


Anmelden zum Antworten