Probleme bei CEdit-Ausgabe
-
Guten Morgen,
ich lese eine Textdatei zeilenweise ein, und möchte diese zeilenweise in einem CEditfeld ausgeben. Das Problem das ich habe ist, dass der Text in dem Editfeld nicht zeilenweise sichtbar wird, sondern erst komplett angezeigt wird, wenn die Schleife durchgelaufen ist. Aufgefallen ist mir das, als ich einen Sleep-Befehl eingebaut hab.
Wie kann ich das denn ändern?
void Cneu2guiDlg::OnBnClickedOk() { CFile Source; CString pathName, row, text; char *buffer; int zeichenzaehler = 0, reihenzaehler = 0, size = 0; TCHAR szFilters[]= _T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"); CFileDialog fileDlg( TRUE, _T("txt"), _T("*.txt"), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters); if(fileDlg.DoModal() == IDOK) { pathName = fileDlg.GetPathName(); if(!Source.Open(pathName, CFile::modeNoInherit ,NULL)) { text = _T("Datei konnte nicht geöffnet werden! Bitte Vorgang wiederholen"); MessageBox(text); } else { size = Source.GetLength(); buffer = (char*) calloc ( size+1, sizeof(char) ); Source.Read(buffer, size); CString buffer_str = (CString)buffer; free(buffer); while(zeichenzaehler < buffer_str.GetLength() && buffer_str[zeichenzaehler] != '\n') { row.Insert(reihenzaehler, buffer_str[zeichenzaehler]); zeichenzaehler++; m_out.SetWindowTextW(buffer_str); Sleep(25); } } Source.Close(); } }
-
Hab UpdateWindow() gefunden, allerdings muss ich den Code ein wenig umbasteln da die Quelldatei doch komplett eingelesen wird.
Aber mal eine andere Frage, wie kann ich denn, wenn ich einen Button geklickt habe und eine Funktion ausgeführt wird, das Fenster aktiv halten, sodass ich das noch verschieben kann?
-
Das ist absoluter Quark. Durch den Sleep blockierst Du auch Window Updates, weil eben keine MessageLoop lääuft. UpdateWindow kann man verwenden, aber welchen Sinn macht das wenn die Anwendung für evtl. Langezeit so blockiert wird?
Bau Dir einen Timer, der sich bei jedem entsprechenden Tick eine Zeile holt und darstellt.
Was soll das auch? In 25msec kann man nichts aufnehmen....
Willst Du einen Fortschritt anzeigen nimm einen Progessbar.