jokey2
Erfahrenes Mitglied
Hallo Gemeinde!
In meiner Anwendung habe ich ein Logfenster, das mit einem CRichEditCtrl realisiert ist. Dort gebe ich Meldungen aus, die teils von meinem Programm, teils von anderen Anwendungen kommen, die von meinem Programm gestartet werden. Diese Meldungen können manchmal recht schnell aufeinander folgen.
Die Ausgabe mache ich folgendermaßen:
Die Erzeugung des Controls geschieht so:
Ich mach also folgendes:
Erst zähle ich die Zeilenumbrüche, um die Anzahl der Zeilen zu ermitteln. Das brauche ich später zum scrollen. Dann hänge ich den neuen Text an den vorhandenen an und setze die Auswahl wieder auf das Ende des Textes. Danach scrolle ich die ermittelte Anzahl von Zeilen nach unten, damit immer das Ende des Textes im Fenster sichtbar ist. Mit den beiden letzten Zeilen will ich erreichen, daß die Anzeige auch tatsächlich jedes Mal aktualisiert wird (DasCRichEditCtrl ist auf einer Tab-Seite, wenn ich die nicht auch aktualisiere, werden die Scrollbalken nicht mehr richtig gezeichnet).
Das Problem ist, daß das Control manchmal beim Eintreffen neuer Meldungen flackert. Bei langsameren Rechnern mehr als bei schnelleren.
Wenn mir jemand helfen könnte, diesen ziemlich unschönen Effekt zu beseitigen, wäre ich sehr dankbar.
In meiner Anwendung habe ich ein Logfenster, das mit einem CRichEditCtrl realisiert ist. Dort gebe ich Meldungen aus, die teils von meinem Programm, teils von anderen Anwendungen kommen, die von meinem Programm gestartet werden. Diese Meldungen können manchmal recht schnell aufeinander folgen.
Die Ausgabe mache ich folgendermaßen:
Code:
int iLineCount = 0;
std::string::size_type stCRIndex = 0;
while((stCRIndex = strMessage.find('\n', stCRIndex)) != std::string::npos)
{
iLineCount++;
stCRIndex++;
}
m_pEditWnd->SetSel(-1, -1);
m_pEditWnd->ReplaceSel(strMessage.c_str());
m_pEditWnd->SetSel(-1, -1);
m_pEditWnd->LineScroll(iLineCount);
m_pEditWnd->RedrawWindow();
m_pEditWnd->GetParent()->RedrawWindow();
Die Erzeugung des Controls geschieht so:
Code:
pNewEdit->Create(WS_BORDER | WS_VSCROLL | WS_HSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE | ES_READONLY, crTab, this, iNewID);
Ich mach also folgendes:
Erst zähle ich die Zeilenumbrüche, um die Anzahl der Zeilen zu ermitteln. Das brauche ich später zum scrollen. Dann hänge ich den neuen Text an den vorhandenen an und setze die Auswahl wieder auf das Ende des Textes. Danach scrolle ich die ermittelte Anzahl von Zeilen nach unten, damit immer das Ende des Textes im Fenster sichtbar ist. Mit den beiden letzten Zeilen will ich erreichen, daß die Anzeige auch tatsächlich jedes Mal aktualisiert wird (DasCRichEditCtrl ist auf einer Tab-Seite, wenn ich die nicht auch aktualisiere, werden die Scrollbalken nicht mehr richtig gezeichnet).
Das Problem ist, daß das Control manchmal beim Eintreffen neuer Meldungen flackert. Bei langsameren Rechnern mehr als bei schnelleren.
Wenn mir jemand helfen könnte, diesen ziemlich unschönen Effekt zu beseitigen, wäre ich sehr dankbar.