Seite 1 von 1

Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 18:18
von Darie
Wie kann man die aktuelle Größe eines WindowedScreen ermitteln, der mit Autostretch geöffnet wurde?

Re: Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 18:22
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

Re: Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 18:29
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.

Re: Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 18:33
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?

Re: Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 18:35
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 ^^

Re: Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 18:38
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...

Re: Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 18:40
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.

Re: Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 18:49
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

Re: Grösse eines WindowedScreen mit Autostretch

Verfasst: 17.10.2010 19:05
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