MFC OnNavigateComplete2(...)

  • #1
D

Don_Pazo

Bekanntes Mitglied
Themenersteller
Dabei seit
16.09.2005
Beiträge
112
Reaktionspunkte
0
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 ...

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 ?

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):

BOOL DeineHtmlView::preTranslateMessage(MSG* pMsg) {
  if(waitForPage && (pMsg->message == WM_MOUSEMOVE))
    return TRUE;
  else
    return CHtmlView::preTranslateMessage(pMsg);
}
 
Thema:

MFC OnNavigateComplete2(...)

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben