Improved Console 5.0 für C
-
ich habe mir die Datei nun heruntergeladen und alles ersetzt wie du es mir gesagt hast.
Was mache ich nun? Ich will ja nicht alle Methoden in mein Hauptprogramm kopieren oder so.
Macht man das iwie mit einer neuen Klasse oder wie geht das?
-
ich wäre wirklich dankbar für eine schnelle Antwort!!
-
-
blackevil673 schrieb:
ich habe mir die Datei nun heruntergeladen und alles ersetzt wie du es mir gesagt hast.
Was mache ich nun? Ich will ja nicht alle Methoden in mein Hauptprogramm kopieren oder so.
Macht man das iwie mit einer neuen Klasse oder wie geht das?Du brauchst eine Header-Datei mit C-Syntax.
Dafür kannst du die vorhandene ic.hpp nehmen und entcplusplusfizieren.
Die C-Header-Datei bindest du dann in dein Hauptprogramm ein und dann
kannst du die Improved Console benutzen.
-
So ungefähr habe ich mir das auch schon gedacht.
Leider habe ich keine Ahnung wie ich es entcplusplusfizieren kann
Ich habe weder einen schimmer was ich z.B. bei einem namespace ersetzen soll, noch was jetzt zufälligerweise c++ sein könnte
Was ich bisher hatte hat jedes mal tausend Fehler ausgespuckt.
Ich bin echt verlorenDas eigentliche Problem ist ja, dass ich
die Konsolengröße ändern möchte. Ich habe dazu schon 5 - 10 Methoden
aus dem Internet probiert, die aber teilweise gar nicht erst funktionierten
oder das Problem aufwarfen, dass es nur einmalig funktionierte. Ich startete
das Programm, das Konsolenfenster bekommt die passende Größe. Rufe ich aber
noch einmal die Methode auf, passiert nichts mehr. Hänge jetzt schon 3 Wochen
an diesen kleinen Bugs und komme einfach nicht weiter
-
Wenn es dir lediglich um die Änderung des Konsolenfensters geht,
lohnt sich der Aufwand der Entcplusplusfizierung wohl nicht,
es sei denn du würdest später sowieso mehrere Funktionen davon brauchen.
Guck einfach nach ob die Impoved Console die Funktionen hat, die du brauchst
und schreib sie um.Änderung des Konsolenfensters betreffend kannst du ja auch hier in der WinApi Abteilung fündig werden.
Versuch doch auch mal das hier:
http://www.c-plusplus.net/forum/260142?highlight=konsolengr��e// Nicht alle Kombinationen sind möglich, kann je nach System und Monitor variieren.
-
Dies sind die Funktionen die ich benötige. Diese müssten doch soweit eigentlich in C sein und funktionieren, oder?
Es lässt sich alles problemlos kompilieren, jedoch wenn ich setWindowSize(10,10) schreiben, ist die Konsole immer noch gleich großbool bufferedMode(false); CONSOLE_SCREEN_BUFFER_INFO getCSBI () { CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(GetConsoleWindow(), &csbi); return csbi; } int getBufferWidth () { return getCSBI().dwSize.X; } int getBufferHeight () { return getCSBI().dwSize.Y; } void setBufferSizeNoModeCheck (int width, int height) { COORD size; size.X = static_cast<SHORT>(width); size.Y = static_cast<SHORT>(height); SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), size); } void setWindowSize (int width, int height) { // Make sure the screen buffer is at least as large as the window int newBufferWidth = max(width, getBufferWidth()); int newBufferHeight = max(height, getBufferHeight()); setBufferSizeNoModeCheck(newBufferWidth, newBufferHeight); SMALL_RECT rect; rect.Top = 0; rect.Left = 0; rect.Right = static_cast<SHORT>(width - 1); rect.Bottom = static_cast<SHORT>(height - 1); SetConsoleWindowInfo(GetConsoleWindow(), TRUE, &rect); if(!bufferedMode) { // Make sure the screen buffer has exactly the same size as the window setBufferSizeNoModeCheck(width, height); } }
-
void SetWindowExt(int x, int y) { SMALL_RECT sr_window = {0, 0, x - 1, y - 1}; COORD extension; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); extension.X = max(x, csbi.dwMaximumWindowSize.X); extension.Y = max(y, csbi.dwMaximumWindowSize.Y); SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension); SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &sr_window); extension.X = x; extension.Y = y; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension); }
-
Danke!!!!!!!! Endlich funktioniert es! So lange am rumprobieren...wirklich toll wie hilfsbereit die Leute hier sind
-
Ich fände es toll wenn mir jemand noch eben erklären könnte was wo passiert!
Sonst hat mir das ganze ja relativ wenig gebracht und ich muss wieder fragen
-
blackevil673 schrieb:
Dies sind die Funktionen die ich benötige. Diese müssten doch soweit eigentlich in C sein und funktionieren, oder?
Es lässt sich alles problemlos kompilieren,Dann kompilierst du im C++ Modus, C kennt keinen static_cast Operator.
blackevil673 schrieb:
Ich fände es toll wenn mir jemand noch eben erklären könnte was wo passiert!
Sonst hat mir das ganze ja relativ wenig gebracht und ich muss wieder fragenZu jeder Funktion gibts eine Erklärung hier
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx
-
Weil das Fenster nicht nicht größer sein kann, als der Fensterpuffer, wird zuerst mal die Größe des Fensterpuffers geholt.
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
Mittels max wird dann der jeweils größere Wert für x und y ermittelt, also entweder der gewünschte Wert oder der aktuelle Wert des Fensterpuffers.
Nun wird der Fensterpuffer auf eben diese Größe gebracht.
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension);
Damit ist sichergestellt, dass der Fensterpuffer mindestens so groß wie die gewünschte Fenstergröße ist.
Jetzt kann das Fenster auf die gewünschte Größe gebracht werden.SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &sr_window);
Zum Schluss wird noch der Fensterpuffer auf dieselbe Größe wie das Fenster gebracht.
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension);
Damit hat das Fenster dann keinen Scrollbalken, weil der Puffer für das Fenster genau so groß wie das Fenster selbst ist.
Zwischendurch werden für die aufgerufenen Funktionen natürlich die Parameter entsprechend gesetzt.
-
okay danke für die Erklärung! Jetzt habe ich den Durchblick in der Methode