Mehrere Lagen / Displays

Windows in jeder Schicht oder platziert werden können, können Zeichnung an jedem beliebigen Schicht oder die Anzeige verwendet werden. Da gibt es eigentlich nur kleinere Abweichungen von diesem Standpunkt aus mehreren Schichten und mehreren Displays behandelt die gleiche Weise (mit der gleichen API-Routinen) und werden einfach als mehrere Schichten bezeichnet, auch wenn die betreffende Embedded-System mehrere Bildschirme verwendet. Der uC / GUI-Viewer ermöglicht es Ihnen, bei jeder einzelnen Schicht (Display schauen), aber im Falle von mehrschichtigen Systemen auch auf den tatsächlichen Ausgang (Composite das betrachten).
Einschränkungen

Derzeit Systemen mit mehreren Bildschirmen und mehreren Lagen kann verwendet werden, aber nicht simuliert. Derzeit Anlagen mit einer Gesamtleistung von max 5 Displays / Layer werden unterstützt.
Sub-Sektion
Bei der Erstellung direkt, ist per default Schicht 0 verwendet. Eine weitere Schicht kann durch die Verwendung GUI_SelLayer () ausgewählt werden.
Probe
Das folgende Beispiel zeigt, wie ein Layer für Zeichenoperationen wählen Sie:
void MainTask (void) (
GUI_Init ();
/ * Zeichne etwas auf Standard-Layer 0 * /
GUI_SetBkColor (GUI_GREEN);
GUI_Clear ();
GUI_DispStringHCenterAt ("Layer 0", 100, 46);
/ * Zeichne somethingon Schicht 1 * /
GUI_SelLayer (1); / * Wählen Sie Layer 1 * /
GUI_SetBkColor (GUI_RED);
GUI_Clear ();
GUI_SetColor (GUI_BLUE);
GUI_FillRect (20, 20, 179, 79);
GUI_SetColor (GUI_WHITE);
GUI_SetTextMode (GUI_TM_TRANS);
GUI_DispStringHCenterAt ("Layer 1", 100, 46);
while (1) (
GUI_Delay (100);
)
)
Screenshot der obigen Beispiel

Auswählen einer Schicht für ein Fenster
Der Window-Manager verfolgt automatisch die Fenster befindet, in der Schicht. Diese in einer ziemlich einfachen Weg ist getan: Wenn die Fenster-Manager verwendet wird, hat jede Schicht eine Top-Level (Desktop) Fenster. Alle anderen Fenster in dieser Schicht ist nur sichtbar, wenn er ein Nachkomme (ein Kind oder Enkelkind oder ...) von einem dieser Fenster auf dem Schreibtisch liegt. Welche Schicht ist in einem Fenster hängt einzig und allein auf dem Desktop-Fenster ist ein Nachkomme.

Probe

hWin0 WM_CreateWindowAsChild = (10, 20, 80, 70, WM_GetDesktopWindowEx (0), WM_CF_SHOW, _cbWin0, 0);
/ * Erzeugen 2 Kind Fenster auf destop 1 * /
hWin1 WM_CreateWindowAsChild = (10, 20, 80, 70, WM_GetDesktopWindowEx (1), WM_CF_SHOW, _cbWin1, 0);
hWin2 WM_CreateWindowAsChild = (110, 20, 80, 70, WM_GetDesktopWindowEx (1), WM_CF_SHOW, _cbWin2, 0);

Screenshot der obigen Beispiel
Screenshot Window-Hierarchie

Verschieben eines Fensters von einer Ebene auf eine andere

Dies kann manchmal sehr wünschenswert und kann leicht erreicht werden: Wenn ein Fenster aus seinem übergeordneten (Die Desktop-Fenster aus einer Schicht oder eines descenedent dieses Fenster ldesktop losgelöst ist) und an einem Fenster, das in einer anderen Schicht liegt, diese Win- Dow Jones bewegt sich tatsächlich von einer Ebene auf eine andere Ebene.
Probe

Das folgende Beispiel zeigt, wie ein Fenster aus seinem übergeordneten Fenster zu lösen und wie es um eine neue übergeordnete Fenster anbringen:
/ * Erzeugen 1 Kind Fenster auf destop 0 * /
hWin0 WM_CreateWindowAsChild = (10, 20, 80, 70, WM_GetDesktopWindowEx (0), WM_CF_SHOW, _cbWin0, 0);
/ * Erzeugen 2 Kind Fenster auf destop 1 * /
hWin1 WM_CreateWindowAsChild = (10, 20, 80, 70, WM_GetDesktopWindowEx (1), WM_CF_SHOW, _cbWin1, 0);
hWin2 WM_CreateWindowAsChild = (110, 20, 80, 70, WM_GetDesktopWindowEx (1), WM_CF_SHOW, _cbWin2, 0); GUI_Delay (1000);
/ * Fenster 2 Lösen von Desktop 1 und befestigen Sie es an Desktop-0 * /
WM_AttachWindow (hWin2, WM_GetDesktopWindowEx (0));

Alle anderen Fenster in dieser Schicht ist nur sichtbar, wenn er ein Nachkomme (ein Kind oder Enkelkind oder ...) von einem dieser Fenster auf dem Schreibtisch liegt. Welche Schicht ist in einem Fenster hängt einzig und allein auf dem Desktop-Fenster ist ein Nachkomme.
Screenshot Window-Hierarchie

Die folgende Tabelle zeigt den Screenshot und das Fenster Hierarchie der obigen Probe nach Anbringen der Fenster an die neue Muttergesellschaft:
Screenshot Window-Hierarchie
Mit Multi-Layer-Unterstützung
uC / GUI nicht zwischen mehreren Lagen oder mehrere Bildschirme zu unterscheiden. Bei Verwendung mehrerer Schichten in der Regel die Größe und die Treiber für jede Schicht ist die gleiche. Der Viewer zeigt jede Schicht in einem separaten Fenster. Der Composite-Fenster des Viewers zeigt die Schichten

über einander:

Wenn Sie den Betrachter mit mehreren Ebenen
Der uC / GUI Betrachter Leckereien Pixel mit Index 0 in einer Schicht über Schicht 0, das als transparent. Dies bedeutet in der Composite-Ansicht die Pixel der darunter liegenden Ebenen sichtbar sind.

Mit Transparenz

Das folgende Beispiel zeigt, wie Sie ziehen transparent und nicht transparent:

GUI_SelLayer (1);
GUI_SetBkColor (GUI_WHITE);

/ * Wählen Sie Weiß für den Hintergrund * /
GUI_Clear ();
GUI_SetColor (GUI_BLACK);
/ * Wählen Sie Schwarz für den Text * /
GUI_SetFont (& GUI_FontComic24B_ASCII);
GUI_DispStringHCenterAt ("Layer # 1", xsize / 2, 5);
GUI_SetColorIndex (0);
/ * Wählen Sie Transparenz * /
GUI_FillCircle (LCD_GetXSize () / 2, ysize / 2 + 15, ysize / 2 bis 20);
/ * Eine transparente Kreis gezogen werden * /
Multi Layer Probe

Das folgende Beispiel enthält einen Screenshot des Betrachters mit 2 Schichten. Das simulierte LCD-Controller ist das integrierte LCD-Controller eines Toshiba TMPR3916 (Steinbock 2). Layer 0 (E) zeigt Farbbalken mit einem hohen Farb-Konfiguration. Layer 1 (B) zeigt einen transparenten Kreis auf weißem Hintergrund mit farbigen Rechtecken. Der Composite-Fenster zeigt das Ergebnis, das eigentlich auf dem Display angezeigt:
Da aber für alle Layer 0 Index 0 bedeutet Transparenz, Index 0 kann nicht dis-play-Farben verwendet werden. Dies bedeutet auch, dass die Farbe Konvertierung sollte niemals nachgeben 0 als beste Übereinstimmung für eine Farbe, da dies in einer transparenten Pixel führen. Dies bedeutet, dass nur einige feste Palette Modi verwendet werden sollte und dass man vorsichtig sein, wenn Sie definieren eigene Palette benötigen. Sie müssen sicherstellen, dass die Farbkonvertierung (24 Bit RGB -> Index) nie Ausbeuten 0 als Ergebnis.
Fixed-Palette Modi

8666_1 ist derzeit das einzige verfügbare Modus. Für Details schauen Sie bitte im Kapitel Farben.
Custom-Modus-Palette
Wenn Sie eine benutzerdefinierte Palette sollten in einer Schicht verwendet werden,> 0, die erste Farbe sollte nicht von der Farbe Konvertierungsroutinen eingesetzt werden. Das folgende Beispiel zeigt eine Definition für einen Kun-tom-Palette mit 15 Graustufen:
# Define LCD_FIXEDPALETTE_1 0
# Define LCD_PHYSCOLORS_1 0x000000,
/ * Transparenz, nicht schwarz * / \
0x000000, 0x222222, 0x333333, \
0x444444, 0x555555, 0x666666, 0x777777, \
0x888888, 0x999999, 0xAAAAAA, 0xBBBBBB, \
0xCCCCCC, 0xDDDDDD, 0xEEEEEE, 0xFFFFFF
Wenn Sie brauchen, um ein paar schwarze Punkte mit dieser Palette können Sie nicht verwenden GUI_SetColor (0x000000) zu zeichnen. Das Ergebnis aus der Farbe Konvertierungsroutinen würde Index 0 (transparent). Sie sollten GUI_SetColorIndex (1).
Mit Multi-Display-Unterstützung
Jede Anzeige kann mit einem eigenen Fahrer und mit seinen eigenen Einstellungen zugegriffen werden. Sie können bis zu 5 verschiedenen Displays zu definieren.
Multi-Display Probe
Das folgende Beispiel zeigt einen Screenshot der Simulation mit 2 Displays. Die Faust-Display ist ein 8 Bit-Farbdisplay mit einer Größe von 320 x 240 Pixel. Der Fahrer ist LCD13XX.c konfiguriert für einen Epson S1D13705 LCD-Controller. Die zweite Anzeige ist ein 1bpp bw-Display mit einer Größe von 240 x 128 Pixel. Der Fahrer ist LCDSlin.c konfiguriert für einen Toshiba T6963 LCD-Controller:

Members Login
username
password
New MemberRegister Here
Newsletter Signup