2016-05-27 4 views
1

Umwelt:

  • PDCurses neueste Version
  • 10 Windows-
  • Visual Studio 2015-Update 2

Problem

PDCurses bietet eine Funktion getmaxxy, um die maximalen x- und y-Koordinaten des Bildschirms zu erhalten. Dies gibt beim Start korrekte Werte zurück, aber wenn ich die Größe des Fensters mit der Maus ändere und dann wieder getmaxxy rufe, bekomme ich die gleichen Werte zurück.PDCurses getmaxxy Funktion gibt immer die gleichen Werte

Ist das ein Fehler/Einschränkung in pdcurses? Gibt es eine Windows-spezifische Möglichkeit, diese Informationen stattdessen zu erhalten?

Ich habe auch versucht, diese spezifische Lösung Fenster und es gibt auch immer die Startwerte: Getting terminal size in c for windows?

+0

Nachdem ich die Bibliothek noch nie benutzt habe, weiß ich nicht, ob das richtig ist oder nicht, aber für mich klingt 'getmaxxy' wie eine Funktion, die Ihnen die maximale Fenstergröße und nicht die aktuelle Fenstergröße bietet. Kannst du das überprüfen? – NathanOliver

+0

Es gibt die Größe der Konsole korrekt zurück, wenn das Programm zum ersten Mal gestartet wird. Es ändert sich nie, ob Sie das Fenster größer oder kleiner machen. – jackmott

Antwort

2

die Quelle Lesen,

  • die _maxx und _maxy Mitglieder WINDOW nur dann gesetzt werden, wenn eine Erstellung Fenster (einschließlich Duplizieren eines Fensters).
  • stdscr ist ein Fenster

Wenn Sie den Bildschirm der Größe verändert haben, dann sollten Sie PDCurses über die neue Größe sagen, resize_term (von ncurses eine Funktion angepasst) unter Verwendung von zB

resize_term(new_lines, new_cols); 

und , die erstellt die Standardfenster wie stdscr.

Für das, was es wert ist, bietet PDCurses diese Funktionen für die Kompatibilität mit ncurses:

+0

Ich sehe, also muss ich OS-spezifischen Code verwenden, um zu erkennen, dass das Fenster in der Größe geändert wurde, und herauszufinden, was ncurses/pdcurses zu erzählen, es klingt wie. – jackmott

+1

ncurses hat einen 'SIGWINCH'-Handler und aktualisiert die Bildschirmgröße nach dem Lesen von' KEY_RESIZE', aber nichts existiert für pcurses - etwas Arbeit wird benötigt. –

1

Nur Überprüfen Sie auf KEY_RESIZE, und wenn es auftritt, rufen Sie resize_term(0, 0). In den Demos (in testcurs, Regen und Wurm) können Sie mehrere Beispiele sehen. is_termresized() kann verwendet werden, wenn Sie die Tastatureingabe nicht überprüfen.

resize_term() ist effektiv zwei verschiedene Funktionen - mit Nullen als Parameter reagiert es auf benutzerinitiierte Größenanpassung; Bei Nicht-Nullen wird versucht, das Fenster auf die angegebene Größe zu skalieren. In der Regel ist nur eine oder die andere Fähigkeit (oder keine) auf einer bestimmten Plattform verfügbar. SDL ermöglicht beides.

+0

Ich glaube, dass auf Windows/Win32 Build KEY_RESIZE nicht funktioniert, ist das richtig? – jackmott

Verwandte Themen