Konsolenfenster löschen
-
Hallo,
ich wüsste gerne, wie ich die Konsole mit Hilfe einer WinAPI-Funktion löschen kann, so wie mit System("cls").
Ich habe dafür einfach nichts gefunden...Mit freundlichen Grüßen
DerRatlose
-
Check this out
http://www.isthe.com/chongo/tech/comp/ansi_escapes.htmlprintf("\033[2J\n");
-
Also eigentlich wollte ich keine Systeminterrupts nutzen...
Vielleicht hat ja noch jemand eine bessere Idee.Mit freundlichen Grüßen
DerRatlose
-
Alternativ könntest du dir auch ein std-Handle holen und mit den Event-Funktion zum Anfang springen und Reihe für Reihe (x * y) mit einem whitespace befüllen. Ist aber eher die schlechtere Variante.
-
Gibt es nicht irgendeine Möglichkeit über die WinAPI, so wie SetConsoleCursorPosition für die Positionierung des Cursors?
Mit freundlichen Grüßen
DerRatlose
-
Ja! Sagte ich doch bereits. Hol dir einfach das Handle, dann kannste das für alles missbrauchen:
http://msdn.microsoft.com/en-us/library/ms683231(VS.85).aspx
-
Kannst du mir evtl. ein Beispiel geben? Ich werde daraus nicht schlau...
Mit freundlichen Grüßen
DerRatlose
-
was spricht gegen system("cls") ?
-
Vorsicht, Code ist ungetestet, dass meiste ist aus der MSDN geraten:
#include <iostream> #include <windows.h> #include <stdio.h> void clearScreenBuffer( HANDLE hOutPut, CONSOLE_SCREEN_BUFFER_INFO screenInfo) { COORD pos = { 10, 0 }; SetConsoleCursorPosition( hOutPut, pos ); GetConsoleScreenBufferInfo(hOutPut, &screenInfo); unsigned short stride = screenInfo.dwMaximumWindowSize.X * screenInfo.dwMaximumWindowSize.Y; for( unsigned short rows = 0; rows < stride; ++rows ) { std::cout<<" "; } }; int main() { HANDLE hOutPut = GetStdHandle( STD_OUTPUT_HANDLE ); CONSOLE_SCREEN_BUFFER_INFO screenInfo; clearScreenBuffer( hOutPut, screenInfo ); std::cin.get( ); }
-
DerRatlose schrieb:
...Ich habe dafür einfach nichts gefunden...
http://msdn.microsoft.com/en-us/library/ms687401(VS.85).aspx
mfg,
wip0r
-
1. Mit GetConsoleScreenBufferInfo die Größe des ScreenBuffers ermitteln.
2. Mit FillConsoleOuputCharacter die entsprechende Anzahl an ' ' in die Konsole schreiben:void ClearScreen() { HANDLE handle; CONSOLE_SCREEN_BUFFER_INFO csbi; COORD target; DWORD written; target.X = 0; target.Y = 0; handle = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(handle, &csbi); FillConsoleOutputCharacter(handle, ' ', csbi.dwSize.X * csbi.dwSize.Y, target, &written); }
-
Hallo,
danke für die Beispiele. Habe beide mal ausprobiert.
Habe dann den von Belli gewählt, der funktioniert genau so, wie ich es brauche. Musste nur noch am Enge anfügen, dass der Cursor wieder oben links in die Ecke gesetzt wird.Mit freundlichen Grüßen
DerRatlose
-
Habe dann den von Belli gewählt, der funktioniert genau so, wie ich es brauche. Musste nur noch am Enge anfügen, dass der Cursor wieder oben links in die Ecke gesetzt wird.
Meiner tut in etwa dasselbe, dein Problem war wohl eher, dass du ihn nicht implementieren konntest und der von Belli auf Anhieb funktionierte.
-
Kóyaánasqatsi schrieb:
Meiner tut in etwa dasselbe
Wenn ich das richtig sehe, schlägst Du vor, zig-mal 'cout' aufzurufen. Erstens ist das keine WinApi-Funktion, aber viel wichtiger: Das dürfte bedeutend langsamer sein.
-
Ich konnte beide implementieren, aber der von Belli lief einfach sauberer.
Mit freundlichen Grüßen
DerRatlose
-
oder ganz einfach:
clrscr();
ist in stdio.h oder conio.h drin!
-
bist du sicher das es clrscr(); gibt?
bei mir gibt es das in beiden headern nicht..
hab MinGW mit Code::Blcks