Direkt zum Inhalt
www.olaf-groeger.de

Hauptnavigation

  • Startseite
  • NMR
  • Programmieren
    • Streams
    • Subclassing von Edit-Controls
  • Software
    • Calimah Scheduler
    • ServicesCtl

Pfadnavigation

  1. Startseite
  2. Programmieren
  3. Streams
  4. Konsolen-Fenster Für GUI-basierte Windowsprogramme

Konsolen-Fenster für GUI-basierte Windowsprogramme

Von olaf , 29 Juli 2025
Dies ist eine Implementierung für MFC mit C++ und reichlich antiquiert.

Ich benutze dieses Fenster für Diagnose-Ausgaben in Release-Versionen. Visual C++ hat leider die unangenehme Eigenschaft cin, cout und cerr nicht richtig zu initialisieren, wenn man eine nicht-textbasierte Anwendung ausführt, d.h. man kann in einer Anwendung, die auf Fenstern basiert, nicht mit cout etwas in ein Konsole-Fenster ausgeben.

Die Lösung für dieses Problem ist natürlich, einen eigenen Ausgabe-Stream zu entwerfen, der mit einem Konsolen-Fenster verknüpft ist. Die Implementierung ist so einfach, dass sie zu eigenen Experimenten nahezu einlädt.

Einen Stream zu implementieren, das hört sich zunächst sehr kompliziert an. Es ist aber viel einfacher als man denkt, da das Design der Stream-Basisklassen auf Erweiterung ausgelegt wurde. Dies wurde möglich, indem man die Implementierung eines Streams auf zwei Klassen verteilt hat. Eine äussere Klasse (basic_istream, basic_ostream) stellt die Schnittstelle zu der inneren Klasse (basic_streambuf) dar, welche die eigentliche Aus-/Eingabe in das Gerät bewerkstelligt. Gleichzeitig kuemmert sich die äussere Klasse um die Formatierung. Alle Ausgabe-Streams sind von basic_ostream abgeleitet. Daraus ergibt sich, dass fuer die Entwicklung eines neuen Streams nur die innere Klasse verändert werden muss. Die äussere Klasse bleibt unverändert (natürlich muss ihr die neue innere Klasse zugeordnet werden). Genug der Vorrede:
 

  • Ableiten einer inneren Klasse von std::streambuf
  • Implementierung der Ausgabe-Routine, die in das Konsolen-Fenster schreibt
  • Überschreiben der Funktionen der Basisklasse streambuf, die aufgerufen werden, wenn eine Ausgabe erfolgen soll
  • Ableiten einer neuen äußeren Klasse, die die innere Klasse verwendet
  • Verwendung und Download

Links für das Blättern im Buch 3

  • Streams
  • Nach oben
  • Ableiten einer inneren Klasse von std::streambuf

Language switcher

  • English
  • German
Unterstützt von Drupal