WinAPI - static window flackert bei textänderung

Hallo,

Ich habe das Problem das bei häufiger Textänderung mein Static Window flackert, wie kann ich das verhindern? Ich ändere den Text mit

SetWindowText(static_status, out);

wie kann ich das machen das das nicht mehr Flackert, der Text soll meinen Fortschritt beim Download anzeigen in der Form

sprintf(output, „Empfangen: %2.1f MB von %2.1f MB %d %s fertig %d kb/s ETA %s\n“, eMB, MB, iProzent, „%“, (int)caSpeed, Time);

angegeben. Liegt es eventuell an der Menge die ich anzeige?

Gruß Michael

Hallo Michael

Ich habe das Problem das bei häufiger Textänderung mein Static
Window flackert, wie kann ich das verhindern? Ich ändere den
Text mit

SetWindowText(static_status, out);

Hmm. Mit welcher Frequenz machst Du das, so 10000 mal pro Sekunde? Ich habe das mit 1 mal pro Sekunde ohne Problem gemacht.

sprintf(output,

Oben hattest Du „out“, hier jetzt „output“, nur so nebenbei.

Liegt es eventuell an der Menge die ich anzeige?

Eher an der Frequenz, vermute ich mal. Animationen ohne Flackern sind generell nur mit „double buffering“ hinzukriegen, dazu sehe ich hier aber keine Möglichkeit - wenn es unbedingt der Titel-Text sein muss.

Du kannst natürlich eine Speicher-Bitmap anlegen (== der zweite Puffer), dort drauf zeichnen und dann (WM_PAINT) auf das Fenster rausblitten (im Client-Bereich). so geht es dann auch ohne Flackern („flickering“).

lG
Martin B

Hallo,

Hmm. Mit welcher Frequenz machst Du das, so 10000 mal pro
Sekunde? Ich habe das mit 1 mal pro Sekunde ohne Problem
gemacht.

Ich habe es auch mit einmal pro Sekunde gemacht, da hat es nicht funktioniert. Werde es nochmal durchschauen, danke

Gruß Michael

Hallo,

Ich habe das Problem das bei häufiger Textänderung mein Static
Window flackert, wie kann ich das verhindern? Ich ändere den
Text mit

SetWindowText(static_status, out);

wie kann ich das machen das das nicht mehr Flackert, der Text
soll meinen Fortschritt beim Download anzeigen in der Form

nur ändern wenn auch was geändert werden muss. Warscheinlich änderst du es zu öfft.

z.b.
class CStaticEx : public CStatic {
public:
void SetWindowText(LPCTSTR s)
{
CString old;
CStatic::GetWindowText(old);
if(old == s)
return;
CStatic::SetWindowText(s);
}
};

etc.

es kann auch sein das du bei deinem repaint des vortschrittsbalken, immer den text mit neu zeichnest, also UpdateData oder so etc, dann liegt es eher daran wie du das realisiert hat,

leider kann man von hier aus nun garnichts sagen, 2 zeilen sind 0 aussage kräftig bei einem system das dauernt irgent eine message verarbeitet.

Hallo,

nur ändern wenn auch was geändert werden muss. Warscheinlich
änderst du es zu öfft.

z.b.
class CStaticEx : public CStatic {
public:
void SetWindowText(LPCTSTR s)
{
CString old;
CStatic::GetWindowText(old);
if(old == s)
return;
CStatic::SetWindowText(s);
}
};

Danke, das hat funktioniert jetzt flackerts nicht mehr, auf die Idee das zu vergleichen bin ich gar nicht gekommen.

Gruß Michael