Allgemein:

Auf dieser Seite werden kurz unsere Layout und GUI-Elemente vorgestellt.

Ribbons:
Ribbon Ribbon

Unsere Programme verwenden die aus Office bekannten Menübänder, da sich die alte Menüstruktur irgendwann als zu unübersichtlich herausstellte.


Der Punkt Datei (Links, Rot) führt in den Backstage-Bereich wo neue Projekte angelegt oder bestehende geladen werden können, außerdem finden Sie hier die Registrierung.

Rechts (Grün) ist der Content-Bereich, also die Funktionen, die auf die angezeigte Seite angewandt werden können.

Ribbons lassen sich in den einfachen und platzsparenden Modus, eine Art Toolbar, umschalten, dieses erreichen Sie durch das Symbol in der Titelzeile (Violet).

GUILayoutLib oder GLL:
GUILayoutLib

Die GUILayoutLib V2 ist OpenSource. Die erste GUILayoutLib entstand ca. 1999 und ermöglicht bis heute, das alle Dialoge größenveränderbar sind. Erstmalig eingesetzt wurde die GLL in einem Dateidialog der 1999 schon das konnte, was der heutige Dateidialog kann - ohne Breadcrumb-Leiste versteht sich, sowas kannte man noch nicht.

Sie setzte auf das damals auf dem PC wenige verbreitete (und eher auf dem Amiga durch MUI bekannte) Horizonale/Vertikale Gruppen (Stack)-Layout und nutzt auch heute noch die Befehle VGroup/HGroup und AddChild. AddChild bindet ControlIDs (Dialog-Resourcen) oder Controls ein. Gruppen und einzelne Controls lassen sich leicht ausblenden, es gibt eine Splitter-Funktion mit der Gruppengrößen vom Benutzer angepasst werden können, alle Größen werden automatisch gespeichert.

Doch es gibt auch einen Nachteil. Verfügt ein Dialog über viele Controls, wird es im Ressourcen-Editor von Visual Studio schnell unübersichtlich.

Property oder Eigenschaftslisten:
PropertyList

Die Eigenschaftsliste (Entstehung ca. 2003) ist dem Control aus Visual Studio nachempfunden (heute aber in einer hübscheren Optik) und ist schlicht ein 2 mal X Grid, sie nutzt keine Dialog-Resourcen sondern erzeugt die jeweiligen Controls selbst.

Dieses ist ein großer Vorteil bei Erweiterungen oder wegfall von Einstellungen, allerdings gibt es auch einige Einschränkungen. Die eine ist, die relativ große aber dennoch begrenzte Anzahl an Controls, die andere ist schlicht die Grid-Form. Pro Zeile ist nur ein Control (manchmal mit PopUp) vorgesehen, dies lässt wenige Spielraum für das Layout.

In den meisten Fällen reicht die Eigenschaftsliste komplett aus und findet darum auch vielfache Verwendung. Ganz optimal ist es aber halt nicht.

BoxLayout-Control:
BoxLayout1
Das aus den Cascading Style Sheets (CSS) bekannte Margin, Border, Padding, Spacing, Visible-Prinzip.

BoxLayout2

Das BoxLayout-Control vereint die Vorteile der GUILayoutLib und Eigenschaftsliste und ergänzt etwas HTML und CSS, Direct2D/GDIPlus und andere Annehmlichkeiten.

Entstanden Ende 2023, war es eine kleine Projektarbeit um zu sehen, ob man das allgemeine Layout unserer Applikationen nicht für den Kunden übersichtlicher, einheitlicher und besser machen könnte.

HTML kommt in der Form von HTML formatierten Beschriftungen, was es ermöglicht bestimmte Bereiche für den Benutzer kenntlicher zu machen und CSS kommt damit, das jedes Element einen Margin-, Border- und Padding-Bereich haben kann, wodurch Abstände einfacher einzurichten sind.

In das Control flossen viele verschieden neue Ideen ein, jedes Control (in oder extern) sollte ohne weiteren Code mit Tooltips versehen werden können, es musste eine direkte Eingabekontrolle geben, z. B. bei Eingabecontrols einen Black/Whitelist-Filter. Allgemein die Änderung von Werten oder die Auswahl von Controls sollten wie in der Eigenschaftsliste Update-Messages versenden, wodurch eine weitere Eingabefilterung möglich werden sollten. Liefert die Message-Funktion einen bestimmten Code zurück, wird der Wert automatisch auf den vorherigen zurück gesetzt, ebenfalls ohne das weiterer Code nötig ist.

Auch sollten im Gegensatz zu den bisherigen Layout-Möglichkeiten lange Beschriftungen nicht umbrochen (vorformatiert) werden müssen bzw. abgeschnitten werden, sondern sollten mehr Platz nach unten anfordern, wenn der Platz horizontal nicht reicht. Kurzum, ein dynamisches Layout ermöglichen wie man es von der aktuellen Windows 10 / 11 - UI gewohnt ist.

Dieses gestattet lange aussagekräftigere Beschreibungen und wenn selbst das nicht reicht, gibt es ja noch die ToolTips.

Weitere Vorteile sind ein PaintManager, das aktuelle Card-Layout kann also in die Form der Eigenschaftsliste oder eine andere gebracht werden und passt sich automatisch an die ausgewähle (Theme) Darstellung der Applikation an. Durch das Ausblenden von Gruppen und Controls lassen sich mehrere Dialog-Seiten mit einem einzigen BoxLayout-Control bewerkstelligen. Also einen TabCtrl-Streifen drüber und man hat einen einfachen PropertySheet - extrem hilfreich.

Widerspenstige Controls, z. B. die ComboBox oder ListBox, die sich eigentlich immer irgendwie anders verhalten als man es gerade braucht, wurden komplett durch eigene Controls ersetzt.

Es wird optisch auf ein modernes und einheitliches Design (Stand Windows 11) gesetzt. Das BoxLayout befindet sich aktuell immer noch in der Weiterentwicklung, da einige Dinge noch fehlen oder noch nicht vollständig umgesetzt wurden. Auch stehen auch noch viele zusätzliche Wünsche auf der Liste, aber mit dieser neuen Layout-Funktion wird dem Benutzer (und uns) einiges mehr an Übersichtlichkeit und Komfort geboten als vorher.

Tree- und List-Control:
Tree und Listen

Das NewListCtrl und NewTreeCtrl entstanden 2017/19 und verdrängten an fast allen Stellen die Systemcontrols TreeView und ListView. Beide Controls entstanden aus der Not, das die Systemcontrols sich in bestimmten Sonderfällen oder durch Systemwechsel nicht so verhielten, wie man es brauchte oder man Code schreiben musste um Verhalten auf anderen Betriebssystemen abzudecken.

Also konnte man auch gleich einen eigenen und besseren Weg gehen. Beide Controls bieten ein internes visuelles Drag and Drop, der Benutzer sieht also (siehe Bild), wo etwas genau eingefügt wird und die eigenen Controls sind vor allem wesentlich schneller und RAM sparender.

Wer schon mal 1M - Einträge (Stresstest) in Listen oder noch besser in Trees eingefügt und dann wieder entfernt hat, weiß wovon die Rede ist. Aber selbst 10K-Einträge im Controls für die Registry kann für einen Benutzer unter Zeitdruck eine Geduldsprobe sein.

Die Listen bieten automatisch bei einer bestimmten Anzahl an Einträgen eine Suchmöglichkeit und Einträge lassen sich ausblenden (ohne sie aus der Liste zu entfernen) und Suchen und beim ersten Bedarf den Text anfordern funktioniert im Gegensatz zum Systemcontrol ohne Probleme.

All das ermöglicht dem Benutzer ein flüssigeres Arbeiten mit unseren Programmen.

Recent (File)-Control:
RecentCtrl

Das Recent-Control Ende 2022 / Anfang 2023, listet alle verwendeten Dateien oder Demo-Projekte. Es besteht eigentlich aus zwei Controls eines für die Gruppen die angelegt werden können und eines für die Dateien der jeweiligen Gruppen.

Im Gegensatz zu der früher genutzten Liste bietet es eine viel bessere Übersicht und fügt sich optisch angenehmer in das Ribbon-Konzept ein. So können Einträge angepinnt oder aber auch thematisch in Gruppen sortiert werden.