Bildschirm löschen

Hallo!

Kann mir jemand sagen, wie ich unter Microsoft Visual C++ in einer Konsolenanwendung den Bildschirm löschen kann? Ich habe in den Standard-Headern keine passende Funktion finden können.

Gruß

Michael

Hi,

du meinst den Inhalt der Konsole zu löschen?!
Ich hab keine Ahnung von VC++ und daher weiß ich nicht, ob es da eine extra Funktion gibt, aber in der Regel reicht ein System Call mit dem Kommando CLS (Clear Screen).

Ciao, Bill

Hallo Bill!

Ein Systemcall reicht leider nicht aus. Ich habe bereits alle Möglichkeiten ausprobiert. Es scheint auch keine Funktion dafür zu geben. Naja, vielleicht hat ja noch jemand anders eine Idee.

Gruß

Michael

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Michael,

den Konsoleninhalt löschen? Wie wär’s mit einer Ansi-ESC Sequenz?

Probiere mal:

printf("\033[2J");

Sofern VC++ keine Probleme damit hat.

Gruss
Martin

Hallo Michael, probiers mal mit diesem Beispiel:
hStdOut muss global definiert sein und den richtigen Wert haben.

Gruß
G.F.

void clrscr(void)
{
COORD corddest;
DWORD lpNumberOfCharsWritten;
DWORD lpNumberOfAttrsWritten;

corddest.X = 0;
corddest.Y = 0;

FillConsoleOutputCharacter(
hStdOut, // handle to screen buffer
’ ', // character to write
80*25, // number of character cells to write to
corddest, // x- and y-coordinates of first cell
&lpNumberOfCharsWritten // pointer to number of cells written to
);

FillConsoleOutputAttribute(
hStdOut, // handle to screen buffer
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE,
// color attribute to write
80*25, // number of character cells to write to
corddest, // x- and y-coordinates of first cell
&lpNumberOfAttrsWritten // pointer to number of cells written to
);

SetConsoleCursorPosition(
hStdOut, // handle to console screen buffer
corddest // new cursor position coordinates
);
}

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

ich benutze zwar Borland, sollte aber bei MS genauso sein:
In der conio.h gibt es clrscr(). Das sollte den Inhalt deines Fensters löschen.

mfG
turboPasqual

Hi,

unter VC++ gibts das nicht, aber die MSDN sagt:

#include void main()
{
system(„cls“);
}

Gruss,

Herb

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo noch einmal,

#include void main()
{
system(„cls“);
}

mit system() rufst du einen externen Befehl auf. Du könntest z.B. auch system(„C:\Temp\Test.bat“) aufrufen. Ich selbst versuche soetwas zu vermeiden, weil ich dann ja die Verarbeitung meines Programmes anhalte und auf ein anderes Programm angewiesen bin. Ich weiß auch nicht, ob das schlau ist oder meine Macke, aber ich mach das halt nicht gerne mit system().
Allerdings muss ich zugeben, daß ich sonst für dich auch keine praktikable Lösung hätte.

mfG
turboPasqual

Hi ho,

manchmal ist es nötig, andere Programme aufzurufen. Normalerweise mach ich das auch nur ungern, aber bei einer reinen Konsolenanwendung dürfte das unkritisch sein. Vor allem, wenn’s zum lernen von C/C++ ist.
Eine Macke dürftest Du da nicht haben, nur die nötige Vorsicht :wink:

Gruss,

Herb

Danke an alle, aber…
Hallo Herb und alle anderen!

Ich habe bisher alle Hinweise ausprobiert, aber leider hat es nicht funktioniert :frowning:
Um deinen Tip zu testen habe ich mittels cout einen Text ausgegeben, der in der nächsten Zeile mit system(„cls“) gelöscht wird. Der Text wird jedoch trotzdem ausgegeben. Den Header habe ich natürlich eingebunden.

Also noch mal vielen Dank für all die Hinweise. Womöglich gebe ich bald auf :frowning:

Gruß

Michael

Hi ho,

also, system(„cls“) funktioniert laut MSDN unter
„Microsoft Win32 Application Programming Interface (API), used with:
the operating system: Microsoft Windows NT, versions 3.51, 4.0
Microsoft Windows 95
the operating system: Microsoft Windows 2000“

Ausserdem gibts noch folgende Möglichkeit:

/\* Standard error macro for reporting API errors \*/ 
 #define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \ 
 on line %d\n", \_\_FILE\_\_, GetLastError(), api, \_\_LINE\_\_);} 

void cls( HANDLE hConsole )
 {
 COORD coordScreen = { 0, 0 }; /\* here's where we'll home the
 cursor \*/ 
 BOOL bSuccess;
 DWORD cCharsWritten;
 CONSOLE\_SCREEN\_BUFFER\_INFO csbi; /\* to get buffer info \*/ 
 DWORD dwConSize; /\* number of character cells in
 the current buffer \*/ /\* get the number of character cells in the current buffer \*/ bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
 PERR( bSuccess, "GetConsoleScreenBufferInfo" );
 dwConSize = csbi.dwSize.X \* csbi.dwSize.Y; /\* fill the entire screen with blanks \*/ bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
 dwConSize, coordScreen, &cCharsWritten );
 PERR( bSuccess, "FillConsoleOutputCharacter" ); /\* get the current text attribute \*/ bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
 PERR( bSuccess, "ConsoleScreenBufferInfo" ); /\* now set the buffer's attributes accordingly \*/ bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
 dwConSize, coordScreen, &cCharsWritten );
 PERR( bSuccess, "FillConsoleOutputAttribute" ); /\* put the cursor at (0, 0) \*/ bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );
 PERR( bSuccess, "SetConsoleCursorPosition" );
 return;
 }

So stehts in der MSDN zum VS.NET.

Viele Grüsse,

Herb