2016-04-07 14 views
0

Ich habe mehrere Dateien vom Desktop ausgewählt.Wie setze ich mfc C++ editbox wiederholt?

CFileDialog fileDlg(TRUE, 
        _T("*.txt"), 
        NULL, 
        OFN_ALLOWMULTISELECT, 
        _T(" (*.txt)|*.txt|")); 

fileDlg.DoModal(); 
POSITION pos(fileDlg.GetStartPosition()); 

while (pos) 
{ 
    CString pathName1(fileDlg.GetNextPathName(pos)); 
    SetDlgItemText(IDC_EDITReference, pathName1); 
    Sleep(2.0 * 1000); 
} 

Es ist sehr einfacher Code, der die Dateipfade alle 2 Sekunden anzeigen sollte. Wenn ich 10 Dateien auswähle, wartet es 20 Sekunden und zeigt dann nur den Pfad der zuletzt ausgewählten Datei an. Es wird nicht alle 2 Sekunden aktualisiert.

Könnte mir jemand dabei helfen ??

Antwort

1

Ihre Funktion ändert (langsam) den Text im Dialogelement - aber das Dialogfeld wird nicht neu gezeichnet, bis Ihre Funktion beendet wird. Sie müssen cal UpdateWindow nach dem Anruf SetDlgItemText

+0

Vielen Dank. :) –

+0

Dies behebt lediglich das unmittelbare Problem der Aktualisierung des Fensters. Das größere Problem wird nicht angesprochen: Eine nicht reagierende Benutzeroberfläche. Während die Funktion ausgeführt wird, reagiert die Benutzeroberfläche nicht auf Benutzereingaben. Dies muss wirklich an die ereignisbasierte Architektur von Windows angepasst werden (z. B. mithilfe eines [Timers] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632592.aspx)). – IInspectable

+0

@Intspectable: Sehr guter Punkt. Möchten Sie eine separate Antwort hinzufügen, oder soll ich meine aktualisieren? (Ich hatte unbewusst angenommen, dass der OP wusste, dass dies nur ein schneller Hack war. Da er die Frage stellt, ist das mit ziemlicher Sicherheit falsch - und jeder, der die Frage später findet, wird es wahrscheinlich auch weniger wissen.) –