MFC OnNavigateComplete2(...)

Dieses Thema MFC OnNavigateComplete2(...) im Forum "Windows XP Forum" wurde erstellt von Don_Pazo, 7. März 2006.

Thema: MFC OnNavigateComplete2(...) Hallo, ich habe eine MFC Anwendung mit Basisklasse CHtmlView. Das Navigation zu einem Link wird von einem...

  1. Hallo,
    ich habe eine MFC Anwendung mit Basisklasse CHtmlView. Das Navigation zu einem Link wird von einem Fortschritanzeiger verfolgt.
    Das erste Problem ist, dass ich nur vor der Funktion Navigate2(...); der Fortschritanzeiger auf 20% und bei der Funktion OnNavigateComplete2(...) auf 100% setzen kann. Ich möchte das gleiche Efekt wie bei der Internet-Explorer von Windows ereichen.

    Das zweite Problem. Ich benutze das Programm um auf einen Entvernten DatenBank per HTML zuzugraufen und diese Daten zu bearbeiten. Es kommt ofters vor das ich um die 50 000 Datensetze bekomme. Dann zeigt meinen Fortschritsanzeiger ( er wird in der Funktion OnNavigateComplete2(...) auf 100% gesetzt) dass die Daten schon geladen sind, es dauert aber noch einige sec. bis die Daten tatsechlich auf dem Bildschirm angezeigt werden.
    In der Moment wenn die Daten auf dem Bildschirm erscheinen, erscheint auch
    auf der Statusleiste das Word Fertig. Das ist genau was ich brauche. Also wie heist die Funktion die das ermittelt oder wie könnte ich das selber schreiben ?

    Sory, konnte nicht besser vormulieren!!
     
  2. a)

    In der Klassendefinition:
    void OnProgressChange(long, long);

    ...

    Source-Datei:
    void DeineHtmlView::OnProgressChange(long nProgress, long nProgressMax) {
    ...
    }

    Daraus kannst Du den prozentualen Wert berechnen. Schau aber mal, ob nProgress konsistent ist; falls nicht, kannst Du vielleicht ein wenig nachhelfen (z.B. bei nProgress = nProgressMax setzen, wenn nProgress > nProgressMax ist). nProgress == -1 -> komplett. Wenn der Wert immer -1 ist, kann der Fortschritt aus technischen Gründen nicht angezeigt werden. Allerdings wird das Ganze wegen Deines zweiten Problems wahrscheinlich sowieso nicht richtig funktionieren, da es sich auch auf den Download selbst bezieht ...


    b)

    Etwas wie OnRenderComplete gibt es imho nicht. Probiere es mal mit OnDocumentComplete. Wenn es das auch nicht anders ist als bei OnNavigateComplete2 und Du die Statusleiste auslesen willst ...

    Vielleicht (quick & dirty ...) eine Variable (bool waitingForPage o.ä.) deklarieren und OnStatusTextChange überschreiben:

    Code:
    void DeineHtmlView::OnStatusTextChange(LPCTSTR pszText) {
      if(waitingForPage) {		
        if(!strcmp(pszText, DeinString)) {
          waitingForPage = false;
          AfxMessageBox(Fertig); // Zum Testen
          ...			
        }
      }
      CHtmlView::OnStatusTextChange(pszText);
    }
    
    Die Klassendefinition entsprechend erweitern.

    waitingForPage vor Navigate2 auf true setzen, oben (und im Fehlerfall) auf false. DeinString wäre eben z.B. Fertig, wenn alles Deutsch ist. Frames werden bei dieser einfachen Implementation nicht berücksichtigt. Aber da Du ja immer nur eine bestimmte Seiten lädst und diese genau kennst ...

    // Edit
    Ups, wenn sich auf der Seite viele Links befinden und man wild mit der Maus rumwedelt, funktioniert es nicht. Das hier sollte Abhilfe schaffen (Links werden trotzdem noch in der Statusleiste angezeigt):