Wie Griff-Schlüssel-Presse-events in c++
Schreibe ich eine benutzerdefinierte Konsole-Programm. Und ich möchte, um es Aussehen wie eine tatsächliche. Also ich binden wollen einigen Aktionen mit Tastendruck-Ereignisse.
Zum Beispiel, wenn Sie die Pfeiltaste gedrückt wird, die zuvor ausgeführten Befehle sollten dem Benutzer angezeigt werden. Ich weiß um die SDL. Aber ich denke, dass es nicht eine standard-library, oder ??
Wenn es andere alternativen, die zum standard-Lieferumfang des CPP-Bibliothek, lassen Sie es mich bitte wissen.
Dank.
Was ist dein OS ? Und wählen Sie mit C oder C++, keinen tag die beiden.
Sie können nicht mit nur der standard-Bibliothek (
Das ist OS abhängig.
es ist Ubuntu 12.x. und Wenn Sie etwas tun kann in c dann offensichtlich es tun können in c++ auch.
Ja, und alles, was Sie tun können, in C und C++, man kann auch in assembler. Das bedeutet nicht, Sie sollten hinzufügen, dass tag auch. Der Punkt ist, dass Sie Dinge tun, die sehr anders in C und C++, da Sie verschiedenen Programmiersprachen. Daher die Antworten, die Sie bekommen, wird anders sein, je nachdem, welche Anwendung Sie verwenden. Wir verstehen, dass die auf der Grundlage der tags.
Sie können nicht mit nur der standard-Bibliothek (
c
oder c++
). Benötigen Sie eine andere Bibliothek oder os-utilities. Sie können den readline - Bibliothek für die Handhabung von Eingabe-Geschichte auf Linux, zum Beispiel.Das ist OS abhängig.
es ist Ubuntu 12.x. und Wenn Sie etwas tun kann in c dann offensichtlich es tun können in c++ auch.
Ja, und alles, was Sie tun können, in C und C++, man kann auch in assembler. Das bedeutet nicht, Sie sollten hinzufügen, dass tag auch. Der Punkt ist, dass Sie Dinge tun, die sehr anders in C und C++, da Sie verschiedenen Programmiersprachen. Daher die Antworten, die Sie bekommen, wird anders sein, je nachdem, welche Anwendung Sie verwenden. Wir verstehen, dass die auf der Grundlage der tags.
InformationsquelleAutor Amit Bhaira | 2013-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie nicht finden alles in der standard-Bibliothek. Es ist alles Plattform-abhängig. In Windows, Sie haben Funktionen wie
GetAsyncKeyState
um den Zustand einer Taste auf der Tastatur zum Beispiel.SDL und SFML haben beide Plattform-unabhängige event-handling.
Nein. Er würde zu behandeln, die auf seine eigenen. Diese würde nur für die Eingabe verwendet werden handling, die Verwaltung der Fenster und Rendern Sie den text (Vorausgesetzt, er macht eine komplett eigene Konsole von Grund auf, unabhängig von der OS-Konsole).
es ist ok, ich werde das tun .. so, ich sollte vorwärts gehen mit SDL.
Es hängt davon ab, was Sie am besten vertraut sind mit. SDL hat ein C-API (Funktionen, Strukturen, Zeiger überall), während SFML hat ein C++ - API (Klassen, Verwendung von Referenzen anstelle von Zeigern, etc...)
Eigentlich Plane ich zwei threads in diesem Szenario erste thread blockiert in getline(cin,Puffer) und andere halten Zuhören für die Taste zu drücken. Sobald der Benutzer auf jede der (aufwärts oder abwärts) - Taste drucken Sie eine zuvor verwendete Befehl, außerdem wird es füllen Sie den Puffer(Zweifel hier, cin kann es tun oder nicht ?? In diesem Szenario), der erste thread. Und wenn der Benutzer drücken Sie die EINGABETASTE ersten thread aufwachen und tun es sich job. Wird es ein guter Ansatz? Oder können Sie mir empfehlen ein besseres ??
InformationsquelleAutor Mohamad Ali Baydoun
Was Sie beschreiben, ist nicht ein "Konsolen-Programm" per se, sondern eine shell.
Auch, Sie wollen nicht, um eingehende Ereignisse, die Sie lieber möchten, Lesen Sie einfach von der Kommandozeile aus.
Um dies zu tun, gibt es verschiedene Möglichkeiten. Windows hat ReadConsoleInput.
Der flexiblere Weg, jedoch ist dies eine usign getline.
Machen Sie spezielle Sache arbeiten muss man einfach haben, zum speichern von vorherigen Eingaben in
std::vector<string>
oder ähnliches.Lesen der raw-Eingabe (ohne echo) von der Konsole aus verwenden, sollten Sie _getch()
getline
ist der beste Weg zu handhaben, einfach zu Lesen, aber es nicht tut, was die Frage bittet.InformationsquelleAutor poitroae