Windows-Konsolenanwendungen (Farbe, Double Buffering, Event Loops und mehr)

Es liegt in der Natur der Dinge, dass man sich beim Erlernen einer neuen Programmiersprache wie C++ zunächst einmal lediglich auf die Entwicklung einfacher Konsolenanwendungen konzentriert und solche „Kleinigkeiten“ wie die grafische Ausgestaltung der einzelnen Programme oder das Input-Handling auf einen späteren Zeitpunkt verschiebt. Allerdings wirkt die für eine Konsolenanwendung typische winzig kleine graue Schrift vor schwarzem Hintergrund auf Dauer ein wenig demotivierend. Denn sein wir doch mal ehrlich, ohne Farbe macht das Leben und das Lernen einfach keinen Spaß!
Wenn Sie jetzt der Meinung sind, dass die Grafikprogrammierung ein Thema für fortgeschrittenere Programmierer ist, dann will ich Ihnen da gar nicht widersprechen. Was ich jedoch im Sinn habe, sind einfach zu nutzende Funktionen, mit deren Hilfe sich ein tristes Windows-Konsolenfenster (unter Windows Vista oder neuer) ohne großen Aufwand verschönen und an die jeweilen Programmanforderungen anpassen lässt. Mit den von Windows bereitgestellten Konsolen-API-Funktionen wäre es sogar problemlos möglich, die alten 2D-Spieleklassiker (Klötzchengrafik, 16 Farben) wieder zu neuem Leben zu erwecken!
Mit Hilfe der in den nachfolgenden Programmbeispielen zum Einsatz kommenden Helper-Klasse sollte es für Sie problemlos möglich sein, Ihre eigenen Konsolenanwendungen im Handumdrehen ein wenig aufzuhübschen. Schauen wir uns doch gleich einmal an, bei welchen Aufgaben uns die CWinConsoleHelperClass so alles behilflich sein kann:

  • Änderung der Fenstergröße.
  • Änderung des Titels.
  • Änderung der Schriftart, Schriftgröße und Schriftdicke.
  • Änderung der Hintergrundfarbe des kompletten Konsolenfensters (RGB-Farbschema).
  • Mehrfarbige Textausgabe (16 Schriftfarben + 16 Hintergrundfarben) an beliebigen Positionen.
  • Einzelne Zeichen, Pixel oder komplette Text-Strings (16 Schriftfarben + 16 Hintergrundfarben) lassen sich in einem sogenannten Back Buffer zwischenspeichern und zu einem späteren Zeitpunkt auf dem Bildschirm präsentieren (Double Buffering).
  • Abfrage von Keyboard- und Maus-Nachrichten.
  • Exakte Zeitmessung (mit Hilfe des Performance Counters) als Grundlage für die Implementierung eigener Ereignisschleifen (Event Loop).

Unser neues E-Book: Vulkan API Programmierung – Vektoren und Matrizen, Beleuchtung, GLSL Shader, Post Processing

Wieder einmal hatten es die letzten Wochen so richtig in sich – ein neuer Vulkan-Artikel musste pünktlich für das Entwickler-Magazin fertig gestellt werden, und die Arbeiten an meinem neuen E-Book

Vulkan API Programmierung – Vektoren und Matrizen, Beleuchtung, GLSL Shader, Post Processing

wollten und wollten einfach kein Ende nehmen. Doch nun ist es endlich vollbracht!



Über den nachfolgenden Amazon-Partnerlink gelangen Sie zur Detailseite des neuen E-Books:
Vulkan API Programmierung - Vektoren und Matrizen, Beleuchtung, GLSL Shader, Post Processing

Vulkan-Framework-Demoprogramm 5 (GUI Rendering)

Im Rahmen unseres fünften Vulkan-Demoprogramms setzen wir uns mit dem Thema GUI-Rendering (GUI: Graphical User Interface) auseinander und demonstrieren, wie sich die einzelnen Elemente einer grafischen Benutzerschnittstelle auf möglichst effiziente Weise darstellen lassen. In diesem Zusammenhang ist die CGUI-Framework-Klasse für die Verwaltung aller GUI-Elemente, Fonts, Text-Strings sowie Shader-Programme verantwortlich und stellt darüber hinaus sowohl Methoden für die Darstellung wie auch für die Interaktion mit den besagten Elementen bereit.

Für die Handhabung der einzelnen GUI-Elemente wurden bislang die nachfolgend aufgelisteten Framework-Klassen implementiert:

  • CGUI_CursorObject-Klasse für die Darstellung von Mauszeigern.
  • CGUI_TextArea-Klasse für die Definition spezieller Bereiche für die Textdarstellung.
  • CGUI_Overlay-Klasse für die Darstellung von texturierten Overlays.
  • CGUI_Button-Klasse für die Handhabung und Darstellung einzelner Buttons.
  • CGUI_HorizontalSlider-Klasse für die Handhabung und Darstellung von horizontalen Schiebereglern.
  • CGUI_VerticalSlider-Klasse für die Handhabung und Darstellung von vertikalen Schiebereglern.
  • CGUI_HorizontalIndicator-Klasse für die Handhabung und Darstellung von horizontalen Indikatoren bzw. Fortschrittsbalken.
  • CGUI_VerticalIndicator-Klasse für die Handhabung und Darstellung von vertikalen Indikatoren bzw. Fortschrittsbalken.
  • CGUI_TexturedArea-Klasse für die Darstellung von speziellen texturierten Bereichen (zum Beispiel Kontrollinstrumente).
Da die Handhabung einzelner GUI-Elemente mehr als nur unpraktisch ist, bietet es sich an, mehrere solcher Elemente zu einem sogenannten GUI-Objekt zusammenzufassen, welches von einer Instanz der CGUI_Object-Klasse verwaltet wird.