Textfeld: autom. Scrollen, wenn neuer Eintrag

Hallo,

Ich nutze in meiner Anwendung ein Textfeld als Logbuch.

Kann mir jemand sagen, wie ich das Textfeld dazu bringe, bei jedem neuen Eintrag herunterzuscrollen, so dass immer der aktuelle Eintrag sichtbar ist?

Ebenso weiß ich noch nicht, wie ich dieses Logbuch anschließend in einer Textdatei speichern kann. viellecht kann mir ja auch da jemand helfen.
 
Der folgende Code scrollt zur letzten Zeile:
C++:
//m_edit ... Member Variable für die Textbox (CEdit)
m_edit.LineScroll(m_edit.GetLineCount());
Und damit kannst du den Inhalt des Textfeldes in eine Datei schreiben:
C++:
#include <fstream>

std::ofstream file("C:\\Temp\\textfile.txt");

if( file.is_open() )
{
    CString strText;
    m_edit.GetWindowText(strText);

    file << (LPCTSTR)strText;
    file.close();
}
Gruß
MCoder
 
Danke für Deine Hilfe,

allerdings klappt das bei mir nicht so wie gewollt...

Scrollen:
Ich habe die entsprechende Zeile in eine Funktion gepackt, die lediglich zum Schreiben des Logbuches zuständig ist. Allerdings scrollt die Textbuch nicht runter.

pMyDlg: Pointer auf das Dialog mit dem Textfeld
m_sLog: Membervariable (CString) des Textfeldes
m_editLog: Membervariable (CEdit) des Textfeldes

Code:
...
pMyDlg->m_sLog += sText;
pMyDlg->m_sLog += "\r\n";

pMyDlg->UpdateData(FALSE);
pMyDlg->UpdateData(TRUE);

pMyDlg->m_editLog.LineScroll(pMyDlg->m_editLog.GetLineCount());

pMyDlg->UpdateData(FALSE);



Textdatei speichern:
Füge ich den Code wie angegeben ein, erscheinen ganz viele Fehler im Debug-fenster in einer Datei, die ich gar nicht selber erstellt habe.
C:\...\VC98\include\new
warum auch immer...

ändere ich
#include <fstream>
in
#include <fstream.h>
(weiß ja nicht, obs ohne .h richtig war, oder obs nur n Tippfehler war)
dann ergibt sich lediglich ein Fehler:
std keine Klasse oder Namespace
 
Der Aufruf von "UpdateData(FALSE)" nach "LineScroll()" setzt die Scroll-Position wieder zurück. Folgende Sequenz reicht aus:
C++:
pMyDlg->m_sLog += sText;
pMyDlg->m_sLog += "\r\n";
pMyDlg->UpdateData(FALSE);

pMyDlg->m_editLog.LineScroll(pMyDlg->m_editLog.GetLineCount());
Der fstream-include ist korrekt, da STL-Header grundsätzlich ohne ".h" verwendet werden.
Die Include-Anweisung hast du hoffentlich am Anfang des cpp-Files eingetragen? Ansonsten kann ich mir die Fehlermeldungen nämlich nicht erklären.

Gruß
MCoder
 
Das kommt von den vorkompilierten Headern bzw. MFC-Einstellungen. Setze als oberstes Include IMMER stdafx.h ein. Stelle zusätzlich immer sicher, dass deine eigenen Includes VOR dem folgenden Block stehen:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
Zurück