the debugger reports "the specified output is NULL" when the resolution is changed and the StartDrawing is called again.
Code: Select all
#Window = 0
EnableExplicit
Global Dim Border.i(1)
Dim Schlange.POINT (31)
Dim StatusText.s(2)
StatusText(0) = "Fenster"
StatusText(1) = "Vollbild"
Global.l Win_Width, Win_Height
Global.l Win_X, Win_Y
Global.l Desk_Width, Desk_Height
Global.d Fact_X, Fact_Y
Define.l Scrn_Width, Scrn_Height
Define.l WMX, WMY, MX, MY
Define.l BorderFlag = 0
Define.l EXIT, Event
Define.l Counter, n, t
ExamineDesktops()
Desk_Width = DesktopWidth(0)
Desk_Height = DesktopHeight(0)
InitSprite()
InitKeyboard()
Procedure Restore_Desktop()
ChangeDisplaySettings_(0, 0)
EndProcedure
Procedure.i Change_Desktop(Width.l, Height.l, Mode.l)
Protected dmScreenSettings.DEVMODE
Protected Check
dmScreenSettings\dmSize = SizeOf(dmScreenSettings)
dmScreenSettings\dmPelsWidth = Width
dmScreenSettings\dmPelsHeight = Height
dmScreenSettings\dmFields = #DM_PELSWIDTH | #DM_PELSHEIGHT
Check = ChangeDisplaySettings_(@dmScreenSettings, Mode)
ProcedureReturn Check
EndProcedure
Procedure ChangeSize( Flag.l )
Select Flag
Case 0
SetWindowLongPtr_(WindowID(#Window), #GWL_STYLE, Border(Flag))
Restore_Desktop()
SetWindowState( #Window, #PB_Window_Normal )
ResizeWindow( #Window, Win_X, Win_Y, Win_Width, Win_Height )
Case 1
Win_X = WindowX(#Window)
Win_Y = WindowY(#Window)
SetWindowLongPtr_(WindowID(#Window), #GWL_STYLE, Border(Flag))
Change_Desktop(Win_Width, Win_Height, #CDS_FULLSCREEN )
SetWindowState( #Window, #PB_Window_Maximize )
ExamineDesktops()
Desk_Width = DesktopWidth(0)
Desk_Height = DesktopHeight(0)
EndSelect
EndProcedure
Border(0) = #WS_CLIPSIBLINGS | #WS_VISIBLE | #WS_CAPTION | #WS_SYSMENU
Border(1) = #WS_CLIPSIBLINGS | #WS_VISIBLE | #WS_POPUP
Scrn_Width = 1024
Scrn_Height = 768
Win_Width = 1024
Win_Height = 768
Fact_X = Desk_Width / Scrn_Width
Fact_Y = Desk_Height / Scrn_Height
OpenWindow( #Window, 0,#PB_Ignore, Win_Width, Win_Height, "WindowedScreen Maximize Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
Win_X = WindowX(#Window)
Win_Y = WindowY(#Window)
OpenWindowedScreen( WindowID(#Window), 0,0, Scrn_Width,Scrn_Height, #True, 0, 0 )
For n=0 To 32
Counter +1
Schlange(0)\x = 512 + 256 * Sin( Counter / 20 )
Schlange(0)\y = 384 + 192 * Cos( Counter / 15 )
For t = 31 To 1 Step -1
Schlange(t) = Schlange(t-1)
Next
Next
Repeat
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
EXIT = 1
EndIf
Until Event = #Null
WMX = WindowMouseX(0)
WMY = WindowMouseY(0)
If BorderFlag = 1
MX = WMX / Fact_X
MY = WMY / Fact_Y
Else
MX = WMX
MY = WMY
EndIf
ExamineKeyboard()
If KeyboardPushed(#PB_Key_F11) And BorderFlag <> 0
BorderFlag = 0
ChangeSize( BorderFlag )
EndIf
If KeyboardPushed(#PB_Key_F12) And BorderFlag <> 1
BorderFlag = 1
ChangeSize( BorderFlag )
EndIf
If KeyboardPushed( #PB_Key_Escape )
EXIT = 1
EndIf
Counter +1
If Counter > 100000 * #PI
Counter = 0
EndIf
ClearScreen( $201008 )
StartDrawing(ScreenOutput())
Schlange(0)\x = 512 + 256 * Sin( Counter / 20 )
Schlange(0)\y = 384 + 192 * Cos( Counter / 15 )
For t = 31 To 1 Step -1
Schlange(t) = Schlange(t-1)
Circle( Schlange(t)\x, Schlange(t)\y, 2*t, RGB( 0, 255 - 8*t, 255 - 8*t ) )
Next
DrawingMode(#PB_2DDrawing_Transparent)
DrawText( 1, 1, "[F11] Fenster [F12] Vollbild [ESC] Beenden", $0FF0FF )
DrawText( 1, 25, "Status: " + StatusText( BorderFlag ), $0FF0FF )
DrawText( 1, 49, "Position: " + Str(MX) + ", " + Str(MY), $0FF0FF )
StopDrawing()
FlipBuffers()
Until EXIT