I try to use OpenWindowedScreen on a window with DPI aware on (Compiler option)
This code work with DPI aware Off, but with DPI aware On when mouse out of screen, mouse cursor position is not good.
I try to correct it, with DesktopScaledX/DesktopUnScaledX but i never succeed
If somebody have an idea and Can help me ?
(First code inspired from Netmaestro : viewtopic.php?t=26375&hilit=openWindowedScreen)
Code: Select all
Enumeration
#Win_Main
#Gdt_Panel
EndEnumeration
;-Gadget
Macro RightGadget(GDT)
(GadgetX(GDT)+GadgetWidth(GDT))
EndMacro
Macro UnderGadget(GDT)
(GadgetY(GDT)+GadgetHeight(GDT))
EndMacro
Structure Editor
ScreenX.l
ScreenY.l
ScreenW.l
ScreenH.l
EndStructure
Global Editor.Editor
Procedure main()
If InitMouse() And InitSprite() And InitKeyboard() And OpenWindow(#Win_Main, 0, 0, 1920, 1080, "Editor", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
PanelGadget (#Gdt_Panel, 0, 0, 250, 500)
Editor\ScreenX = DesktopScaledX(RightGadget(#Gdt_Panel))
Editor\ScreenY = DesktopScaledY(10)
Editor\ScreenW = DesktopScaledX(455*3)
Editor\ScreenH = DesktopScaledY(256*3)
OpenWindowedScreen(WindowID(#Win_Main), DesktopScaledX(RightGadget(#Gdt_Panel)), DesktopScaledY(10), DesktopScaledX(455*3),DesktopScaledX(256*3),0,0,0)
Protected Event.l
Protected inscreen.b
Protected mx.l,my.l
Repeat
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
End
EndIf
Until Event=0
If inscreen=#True
ExamineMouse()
If MouseX()>Editor\ScreenW-2 Or MouseY()>Editor\ScreenH-2 Or MouseX()<1 Or MouseY()<1
ReleaseMouse(1)
inscreen = #False
EndIf
Else
mx = WindowMouseX(#Win_Main):my = WindowMouseY(#Win_Main)
If mx < Editor\ScreenW+Editor\ScreenX And mx > Editor\ScreenX And my > Editor\ScreenY And my < Editor\ScreenY+Editor\ScreenH
ReleaseMouse(0)
MouseLocate(mx-Editor\ScreenX,my-Editor\ScreenY)
inscreen = #True
EndIf
EndIf
ClearScreen(RGB(128,128,128)*inscreen)
StartDrawing(ScreenOutput())
;Other Stuff here
If inscreen=#True
Circle(MouseX(),MouseY(),5,#Red)
EndIf
StopDrawing()
FlipBuffers()
Delay(3)
ForEver
EndIf
EndProcedure
main()