Forum: PC-Programmierung wxWidgets Fenster refreshen / friert ein


von Andreas B. (Gast)


Lesenswert?

Ich habe jetzt mit wxWidgets angefangen. Ich lese eine Diskette ein und
erstelle ein Image. Dazu wird in einer Statusbar angezeigt wie weit das
es schon ist. wird jedoch das Fenster verschoben, oder minimiert und
wiederhergestellt ist das Fenster weiss. Windows meint "keine
Rückmeldung", Bis die Diskette eingelesen ist, dann funktionierts
wieder. Ich habe jetzt noch dort wo der Status geändert wird ein
this->Refresh(); eingefügt, mit dem Ergebnis das das Fenster von selbst
weiss wird (ohne verschieben oder so). Wie kann ich das verhindern? Kann
ich etwas aufrufen das das ganze neu aufbaut oder muss ich da Threads
machen (das würde ich lieber noch lassen...)?

mfg Andreas

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Ich vermute, du blockierst da ganze Programm beim Auslesen auf
irgendeine Weise. Damit blockierst du auch die gesamte
Eventverarbeitung und damit das Neuzeichnen beim maximieren usw.
Es gibt mehrere Möglichkeiten, dass ganze zu umgehen:
- Du verlagerst das ganze Einlesen in einen Thread (am saubersten)
- Du verlegst das Einlesen in den OnIdle-Handler
- Du rufst nicht nur refresh regelmäßig auf sondern auch wxApp::Yield.
Das veranlasst das Ausführen aufgelaufener Events

von Andreas B. (Gast)


Lesenswert?

>- Du rufst nicht nur refresh regelmäßig auf sondern auch wxApp::Yield.
Wie? Ich habe keine Instanz, wenn ich das richtig sehe wird das ganze
mit IMPLEMENT_APP(Project2FrmApp) gestartet... Wobei diese Klasse von
wxApp Yield geerbt hat... Ich habe schon gesucht aber Google findet
nicht das Yield das ich suche....

mfg Andreas

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Du hast überall im Programm Zugriff auf die globale Variable wxTheApp.
Ist vom Typ wxApp und enthält deine von wxApp abgeleitete Klasse.

Aufruf also mit wxTheApp->Yield();

von Andreas B. (Gast)


Lesenswert?

Danke, hat funktioniert. Verschieben funktioniert...

mfg Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.