Grösse eines WindowedScreen mit Autostretch

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Grösse eines WindowedScreen mit Autostretch

Beitrag von Darie »

Wie kann man die aktuelle Größe eines WindowedScreen ermitteln, der mit Autostretch geöffnet wurde?
Repeat
PureBasic
ForEver
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Grösse eines WindowedScreen mit Autostretch

Beitrag von STARGÅTE »

Die Pixel auf dem Screen bleiben natürlich immer gleich (werden halt nur gezerrt.)

Die Breite des Fensters erhälst du über WindowWidth(), WindowHeight()

Code: Alles auswählen

InitSprite()

OpenWindow(1, 0, 0, 800, 600, "Screen", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
OpenWindowedScreen(WindowID(1), 0, 0, WindowWidth(1), WindowHeight(1), 1, 0, 0)

  
Repeat

  ClearScreen(0)
  
  StartDrawing(ScreenOutput())
  DrawingMode(1)
  DrawText(0,0,"Breit: "+Str(WindowWidth(1)), $FFFFFF)
  DrawText(0,20,"Hoch: "+Str(WindowWidth(1)), $FFFFFF)
  StopDrawing()

 FlipBuffers()

Until WindowEvent() = #PB_Event_CloseWindow
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Grösse eines WindowedScreen mit Autostretch

Beitrag von Darie »

Ja, ich würde aber gerne die Grösse des WindowedScreen wissen und nicht die Fenstergrösse. Ich kann das natürlich auch mit WindowWidth nachrechnen, nur wollte ich sicherheisthalber vergleichen, ob der Screen auch wirklich so gross ist, wie das, was ich berechnet hab.
Repeat
PureBasic
ForEver
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Grösse eines WindowedScreen mit Autostretch

Beitrag von TomS »

ScreenWidth = WindowWidth - ScreenX - OffsetRight
ScreenHeight = WindowHeight - ScreenY - OffsetBottom

So rechnest du es aus.
Mach nen Screenshot, füge ihn in Paint oder sonstwas ein und schnippel alles außer den Screen weg. Dann haste die Größe. Aber ich bin mir ziemlich sicher, dass du das gleiche rausbekommt. Warum auch nicht?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Grösse eines WindowedScreen mit Autostretch

Beitrag von STARGÅTE »

Aber wenn der WindowedScreen im Fenster mit AutoStretch eingebunden ist, kann hat er genau die (inneren) Maße des Fensters (abzüglich der Position des Screens und abzüglich der Offsets rechts und unten)

Mit OutputWidth() und OutputHeight() könntest du zwar genau die größe des Ausgabebereiches ermitteln, aber Aufgrund der Stretch-Funktion sind diese Werte immer gleich dem Anfangswert.

Ansonsten gibs wohl nur API ...

Edit: Danke TomS für die Rechnung ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Grösse eines WindowedScreen mit Autostretch

Beitrag von Darie »

Nein, ihr versteht mich nicht richtig. Ich habe beim Öffnen des Screens mit Autostrech als Grösse 1 angegeben. Autostretch füllt den Screen dann automatisch bis zur Fenstergrösse auf. Das heisst, ich bräuchte eine Funktion, die mir die Screengrösse zurückgibt. WindowWidth hilft mir da nicht weiter...
Repeat
PureBasic
ForEver
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Grösse eines WindowedScreen mit Autostretch

Beitrag von TomS »

1 ist keine Größe. Außer du meinst 1x1. Dann ist der Screen 1 Pixel hoch und 1 Pixel breit. Es wird nicht auf einmal 800x600 draus, nur weil das Fenster so groß ist.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Grösse eines WindowedScreen mit Autostretch

Beitrag von Darie »

Ja, ich hab für X,Y als Wert 1 genommen. Wie gesagt, ich könnte das auch anhand der Fenstergrösse ausrechnen, mir wäre es aber lieber wenn ich mit einer API-Funktion die aktuelle Grösse hätte.
Es wird nicht auf einmal 800x600 draus, nur weil das Fenster so groß ist.
Achso, okay....habs geschnallt
Repeat
PureBasic
ForEver
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Grösse eines WindowedScreen mit Autostretch

Beitrag von TomS »

Kleine Demo:

Code: Alles auswählen

InitSprite()
InitMouse()

OpenWindow(0,0,0,800,600,"Alt+F4 zum beenden")
OpenWindowedScreen(WindowID(0),0,0,40,30,1,0,0)



CreateSprite(1, 20,15)
StartDrawing(SpriteOutput(1))
DrawText(0,0,"Hallo")
StopDrawing()

CreateSprite(2, 1,1)
StartDrawing(SpriteOutput(2))
Box(0,0,1,1,$0000FF)
StopDrawing()


Repeat
    ExamineMouse()
    ClearScreen($330000)
    
    
    StartDrawing(ScreenOutput())
    DrawText(-1,-3,Str(MouseX())+":"+Str(MouseY()))
    
    StopDrawing()
    DisplaySprite(1,19,14)
    DisplaySprite(2,MouseX(),MouseY())
    FlipBuffers()
Until WaitWindowEvent(20) = #PB_Event_CloseWindow 
Antworten