Erstellen einer Grafikbibliothek von Grund auf - Seite 15

 
Ansonsten ist es großartig, machen Sie weiter.
 
Für Sie ist es sehr einfach, Steuerelemente auf Kanvas zu erstellen:

1. Entnehmen Sie mehrere Zeichenfunktionen aus der Kanvas-Klasse, nämlich vertikale Linie, Berglinie, Rechteck, gefülltes Rechteck, Text.

2. Um jedes Element zu zeichnen, schreiben Sie eine Funktion: void Button(), void Checkbox()... usw.

3. In der Funktion der Zeichenelemente enthalten Sie Sätze von Aufrufen von Zeichenfunktionen (Linien, Rechtecke), mit denen Sie die Struktur des gewünschten Steuerelements auf der gewünschten Leinwand "zeichnen".

4. eine Instanz jedes erstellten Elements sollte an sein Fenster gebunden werden.

5. Die Eigenschaften jeder erstellten Instanz (Text X, Y, X_SIZE, Y_SIZE...) sollten in einem Array oder einer Struktur gespeichert werden, damit andere Funktionen sie lesen/ändern können.

Und dann werden Sie den gleichen Weg gehen ....)

Und das alles auf Leinwand, wohlgemerkt.

 
Was ist, wenn Sie andere Objekte benötigen, die sich unterhalb des Objekts befinden, das auf dem Haupthintergrund gezeichnet ist?
 
Aliaksandr Hryshyn:
Was, wenn Sie andere Objekte benötigen, die sich unter dem Objekt befinden können, das auf dem Haupthintergrund gezeichnet wird?
Nennen Sie ein Beispiel. Es gibt viele verschiedene Situationen mit unterschiedlichen Lösungen.
 
Реter Konow:
Nennen Sie mir ein Beispiel. Es gibt viele verschiedene Situationen mit unterschiedlichen Lösungen.

In meiner Situation würde eine Leinwand wahrscheinlich ausreichen, ich denke, ich werde tun, was Sie mir geraten haben.

Zumal es bereits eine minimale Unterstützung für Kanvas gibt
 
Jedes Fenster ist eine eigene, unabhängige Leinwand.

Die Erstellung eines Fensters ist ebenso einfach wie die der anderen Elemente:

1. Das Fenster verfügt über einfache Basiseigenschaften mehrerer regelmäßiger Rechtecke, die konsequent auf die erstellte Leinwand gezeichnet werden, indem die Funktion FilledRectangle() (aus der Klasse CCanvas) aufgerufen und ihnen Schablonen- oder nutzbare Werte übergeben werden.

2. das Fenster wird vor seinen Elementen gezeichnet. Dies geschieht mit der speziellen Funktion Draw_window(x, y, w, h); sie ruft z. B. FilledRectangle() die erforderliche Anzahl von Malen auf, um die Fensterstruktur aufzubauen.

3. Dann werden Funktionen aufgerufen, um die Steuerelemente zu zeichnen. Jedes ist ähnlich wie ein Fenster aufgebaut, mit einer Reihe von Rechtecken und Rahmen , die nacheinander gezeichnet werden.

4. Die Eigenschaften jeder Instanz jedes Elements, das durch den Funktionsaufruf erzeugt wird, werden in jede Speicheroption geschrieben, die den anderen Funktionen zur Verfügung steht, darunter:

Eine Funktion, die das Ereignis des Auffindens des Cursors über den Koordinaten des gezeichneten Elements abfängt, die bei jedem Cursorbewegungsereignis eine Schleife durch die Koordinaten aller gezeichneten und gezeichneten Elemente in diesem Fenster durchführt und das direkt darunter liegende findet.

Eine Funktion, die das Ereignis des Drückens auf das Element unter dem Cursor fixiert und seinen Zustand ändert (wenn es interaktiv ist), indem sie eine andere Funktion aufruft, die die Werte der Parameter dieses Elements (Farbe, Symbol...) ändert und es neu zeichnet.

Für den Anfang ist das genug.

 
Roman:

Für HFT halte ich 3D für nützlich, um eine grafische Analyse des Cup-Volumens und des Auftragsflusses zu erstellen.
Aber wie solche Informationen zu interpretieren sind, damit habe ich mich nicht beschäftigt.

Wo ist es erhältlich?

 
Es gibt mehrere Kategorien von Kontrollen, von denen wir zwei Hauptkategorien unterscheiden können:

1. Dekorativ - Linien, Rahmen, Rechtecke, Icons...

2. "Parametrisch" - d.h. mit einem Parameter.

Der zweite Typ wird durch zwei Unterkategorien repräsentiert:

1. Eingabeelemente - bieten die Möglichkeit, den Wert mit grafischen "Mechanismen" zu ändern, die für verschiedene Arten von Parametern entwickelt wurden. Diese Elemente sind in mehrere Gruppen unterteilt, z. B. der logische Zustand wahr/falsch (bool) setzt die Schaltfläche, das Kontrollkästchen und das Optionsfeld, und der Wert des Parameters mit den Grenzen des Bereichs und der Stufe wird durch einen Schieberegler oder ein Eingabefeld gesteuert. Für jeden Parametertyp gibt es mehrere Elemente desselben Typs, die es ermöglichen, seinen Wert auf ähnliche Weise zu ändern.

2. Ausgabeelemente - sie übersetzen den Wert in numerische, textliche oder andere grafisch transformierte Form. Dazu gehören: Tabellenzellen, Textbeschriftungen, Fortschrittsbalken. Indikatoren und Diagramme gehören ebenfalls zu dieser Kategorie und unterscheiden sich lediglich durch ihre Anpassungsfähigkeit an eine große Menge von Ausgabedaten.


Wie ich bereits sagte, ist das Zeichnen von Elementen einfach und unkompliziert. Im Grunde genommen geht es nur darum, ein Array mit Werten zu versehen. Alle Funktionen sind in der CCanvas-Klasse enthalten - Linien, Rechtecke, Rahmen. Die Funktionen müssen nur das Array übergeben, das dann in der Ressource gespeichert und über die Eigenschaft OBJPROP_BMPFILE mit dem Objekt BITMAP_LABEL verbunden wird.

Der Wrapper dieser Klasse stört mich wie das fünfte Bein eines Hundes. (Das muss der Grund sein, warum niemand jemals Bibliotheken auf der Leinwand erstellt hat, weil ihnen von oben gesagt wurde: "Du musst die Kuh nur mit einem Sattel reiten! ;)).