2009-02-13 20 views
26

Kann jemand einen C++ - Wrapper für Ncurses empfehlen?C++ Wrapper für Ncurses?

+0

Ich bin neugierig, warum würden Sie brauchen C++ Wrapper? Warum nicht die C-API direkt verwenden? Nur wundernd :) – hhafez

+15

Sicher, wenn Wrapper nicht existieren. Aber wenn Wrapper existieren, warum nicht verwenden. Ich vermute, Sie verwenden nur Assembler für alles? – BubbaT

+5

es ist ein bisschen wie ein Vergleich von C nach C++ mit dem Übergang von C zu Assembler, nicht wahr? – hhafez

Antwort

3

Versuchen Sie dieses Quellenschmiedeprojekt. Es ist ein NCurses Development Kit für C++

http://ndk-xx.sourceforge.net/

+0

Und Sie haben das benutzt? – BubbaT

+1

Sieht irgendwie verlassen zu mir aus. –

+3

Yep Ryan, darum habe ich gefragt. – BubbaT

1

ich meine eigenen ein paar Jahre geschrieben habe ... Ich tat dies, weil eine ncurses-kompatible Bibliothek in Linux installiert wurde, aber nicht unter Win32. (Ich könnte PDCurses verwenden, aber zu diesem Zeitpunkt konnte ich PDC_breakout() nicht stoppen einen refresh() Vorgang ohne Öffnen des Quellcodes.)

Dieser Wrapper wurde innerhalb von 7 Tagen geschrieben, als Teil eines schnellen Entwicklung. Als solches hat es einige (entfernbare) Abhängigkeiten von Nicht-Eingabe/Ausgabe-Datentypen, die für ein Programm spezifisch sind, aber sie können sicher entfernt werden.

Grundsätzlich habe ich zwei Hauptfunktionen - Initialisierung, die alle Curses Initialisierungsfunktionen und Farbdefinitionen aufruft, die ich später nicht optimieren möchte, und die Refresh-Funktion, die den "internen" Anzeigepuffer an die Ausgabe überträgt .

Insgesamt können Sie sich wohler zu schaffen, in Karteikarte fühlen oder Spickzettel mit "initscr(); cbreak(); noecho(); Bewegung (y, x); addch (ch); endwin(); ", aber wenn Sie meinen Wrapper verwenden möchten, können Sie mir eine Nachricht senden oder sie von here herunterladen, solange Sie sich an die Creative Commons-Lizenz halten.

+0

Danke aber nein. Dies ist ein persönliches Projekt und ich begann eine streambasierte Version zu schreiben. Ich brauche nur ein paar Stunden mehr, um ein Grundskelett zu machen. – BubbaT

13

ncurses selbst enthält eine Reihe von C++ - Bindungen. Ich weiß nicht, ob einige der Hauptverteilungen die C++ - Bindungen enthalten, aber wenn Sie die ncurses source erhalten, werden Sie sie im C++ - Verzeichnis finden.

Ich weiß nicht, ob ich sie unbedingt empfehlen würde, aber sie sind wahrscheinlich die besten C++ - Bindungen und enthalten Bindungen für die Formular-, Panel- und Menüerweiterungen. Sie sind ein bisschen rau an den Rändern und es gibt nicht viel Dokumentation.

+0

In der Tat. Ist Ihnen eine Dokumentation bezüglich der Bindungen bekannt? Kann so etwas online nicht finden und ich würde lieber vermeiden, die Quelle zu lesen -_- – alkar

+0

Soweit ich weiß nur, was im C++ - Verzeichnis in der Ncurses-Quelle ist. Ich habe viel Zeit damit verbracht, die Quelle zu lesen. – Craig

+0

Es gibt nicht einmal den geringsten Hinweis im docs-Verzeichnis. Ich denke, es wird eine Weile dauern. Irgendwelche Tipps, wo man anfangen soll? – alkar

1

Vor ein paar Jahren, als ich es brauchte, überprüfte ich die verschiedenen Curses-Dateien, die die Curses C++ - Dinger liefern. Obwohl sie "gut" funktionierten, war ich enttäuscht - dieser neue Code injiziert noch mehr "verfluchte Makros". Ich habe keinen Versuch erkannt, die Makros abzugrenzen (kein Namensraum, nur wenige Klassen). Ich nehme an, das war nicht ihr Ziel.

Ich entschied schließlich, dass diese Makros auch auf zu vielen nützlichen Symbolen stampften, wie nur Makros tun können. Ich habe meinen Code überarbeitet, um die Auswirkungen auf diese Makros zu minimieren.

Im Wesentlichen habe ich mehrere meiner Apps Methoden, die Dinge auf 2 neue Dateien anzeigen verschoben. Dieses Refactoring hat auch ein paar kleine neue Methoden erstellt, die zu den 2 neuen "Display" -Dateien hinzugefügt wurden. (11 Dateien erweitert auf 13)

Wie ich sage, sie funktionieren gut, mein Code wurde nicht von der Änderung betroffen, die Kommentare in cursesw.h schlagen vor, es ändert Makros in Zeilen, und ich finde einige Klassen in Dort.

cursesf.h hat andere Klassen verwendet wie cursesm.h (für Menü) und cursesw.h (für Windows), curseslk.h (für Soft-Label-Schlüssel), alles was ich noch nicht benutzt habe.

Ich mochte nicht cursesapp.h - vielleicht ist das eine Windows-Sache?


Kann ich das empfehlen? Nun, ich bevorzuge diesen Code den vorherigen Flüchen, obwohl ich die Makros umstrukturiere.

-1

Vielleicht rollen Sie Ihre eigenen C++ Wrappings?

... Ich habe ein paar C++ Wrapper für einige Ncurses und CDK Funktionen und Objekte erstellt.

Allerdings habe ich nur Wrapper für die Funktionen und Strukturen nach Bedarf erstellt Unterstützung für mein eigenes kleines Projekt, das CDK und Ncurses für seine GUI verwendet. Sie können Ihnen jedoch Ideen zum Erstellen Ihrer eigenen C++ - Wrapper von CDK- und ncurses-Aufrufen geben, die Sie benötigen.

Im Grunde habe ich sie verwendet, damit ich Speicherverluste vermeiden konnte, indem die C++ - Destruktoren alle dynamisch erzeugten char * -Strings löschen oder std::string anstelle von char* Strings und so verwenden.

Hier ist ein sehr bescheidenes Beispiel:

class RXL_ncurses { 

public: 
    static void draw(WINDOW * pWin, int y, int x, std::string lineOfText); 
}; 

void RXL_ncurses::draw(WINDOW * pWin, int y, int x, std::string lineOfText) { 
    // 
    // Draw a std::string into the WINDOW*, starting at y,x 
    // 
    chtype letter; 
    unsigned int i; 
    unsigned int xPos; 
    unsigned int yPos; 

    for(i = 0; i < lineOfText.size(); i++) { 
    letter = (chtype) lineOfText[i]; 

    xPos = i + x; 
    yPos = y; 
    mvwaddch(pWin, yPos, xPos, letter); 
    } 
} 

http://mrflash818.geophile.net/software/nc_834v5010generator/