Lassen Sie sich meine Frage beschreiben, wie unten:Wie aktualisiert man Listview und Edit zur gleichen Zeit, wenn man winapi (C++) benutzt?
Ich habe ein Fenster mit
CreateWindow
, und dann schaffte auch einListview
und EDIT Feld zu zeigen, etwas geschaffen;hListview
ist der Griff des Listview undhEdit
ist der Griff der EDIT-BoxVorerst mein Programm ist eine Single-Threaded-App;
Ich habe 2 Funktionen ungültig
SetListviewText()
: anderen WertListview
‚s angegebene Element und subitem zuweisen (dieListview
im Berichtsmodus);und
void SetEditBoxText()
: einen Text anfügen Box natürlich zu bearbeiten, zu, beide mitSendMessage();
Beispiel aktualisiert wurden,
SetEditBoxText(hEdit, "1111111111111111111111111111111."); SetListviewText(hListview, "Description1",19); Sleep(1000); SetEditBoxText(hEdit, "2222222222222222222222222222222"); SetListviewText(hListview, "Description2",20); SetEditBoxText(hEdit, "33333333333333333333"); Sleep(5000);
Frage,
, warum ich Nur kann die EDIT Box Inhalt wie folgt:
111111 (
Listview
Text aktualisieren jetzt nicht)....... 1 Sekunde Verzögerung .........
2222222222222 (
Listview
Text jetzt nicht aktualisieren)3333333333333333 (
Listview
Text jetzt nicht aktualisieren)....... 5 Sekunden Verzögerung .........
(
Listview
Text Update schließlich nach 6 Sekunden ..)Description1
Description2
Warum mit EDIT Feld zusammen aktualisiert werden nicht den Text der Listenansicht können?
PS: Wenn ich nur Code in Button-Klick-Fall unterschreiben, ist es in Ordnung, es sofort zu zeigen.
SetListviewText(hListview, "Description2",20);
Sollte ich mehrere Threads verwenden? Wenn ja, wie?
Vielen Dank im Voraus.
Sie können 'Sleep()' nicht in einem GUI-Thread verwenden. Verwenden Sie stattdessen Timer. – andlabs
SendMessage (hListview, LVM_UPDATE, index, 0) oder InvalidateRect – nariuji
Warum ist es für Sie ein Problem, dass Bildschirmaktualisierungen nicht sofort durchgeführt werden, aber Windows mehrere Änderungen erfasst und alle auf einmal anzeigt? Rufen Sie Sleep() wirklich in einem GUI-Thread auf oder dient dies nur zu Demonstrationszwecken? Vielleicht möchten Sie lesen http://stackoverflow.com/questions/2325894/difference-between-invalidaterect-and-redrawwindow. –