Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
If OpenWindow(0, 0, 0, 220, 100, "Example...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Repaint ; Redraw on the window every time the window is repainted
StartDrawing(WindowOutput(0))
Box(10, 10, 50, 50, RGB(255, 0, 0))
StopDrawing()
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Wenn ich die Beiträge bisher richtig verstanden habe, wird nach StartDrawing(WindowOutput()) bei MacOS und Linux gar nichts gezeichnet.
In der Hilfe steht folgender Text:
Auf ein Fenster gezeichneter Inhalt wird gelöscht, wann immer das Fenster oder ein Teil davon von einem anderen Fenster verdeckt wird, außerhalb des Bildschirms verschoben wird, oder wenn das Fenster versteckt oder minimiert wird. Um daher den gezeichneten Inhalt sichtbar zu halten, muss dieser nach jedem #PB_Event_Repaint Ereignis erneut gezeichnet werden.
Den Text verstehe ich so:
Es wird in jedem Fall das gezeichnet was ich angebe, z.B. Box(), Line() usw.. Erst wenn ich das Fenster mit meiner Zeichnung über die Kante schiebe oder minimiere, muss ich alles neu zeichnen, weil die Zeichnung ausgelöscht wird. (und genau so ist es auch bei Windows)
Ich komme ja nun vermutlich aus der anderen Richtung. Für mich stellt sich das so dar, dass es bei MacOS und Linux anders läuft...
Woher soll ich wissen, dass alle MacOS- und Linux-Nutzer von Anfang an nichts zu sehen kriegen? Das geht für mich nicht aus der Hilfe hervor.
Und übrigens: Welcher Inhalt wird denn gelöscht, wenn keiner da ist?
Ja, es kommt halt total auf die Fenstermanager an. Unter Linux gibt es da zig verschiedene. Und da kann es auch sein, dass so ein Repaint-Event am Anfang mehrmals kommt. Und generell ist es keine gute Idee Dinge auf eine Fenster zu zeichnen, wenn noch nicht alle Events abgearbeitet wurden, weil diese Events dann dazu führen können, dass wieder alles gelöscht wird.
Es ist eher Zufall, dass es unter Windows erst mal richtig aussieht. Das könnte man in der Hilfe sicherlich verbessern. Wichtig ist für dich nur zu wissen, dass `WindowOutput()` fast immer der falsche Weg ist.