J'aurais besoin de votre aide pour maitriser cette histoire de DPI.
Je sais construire une application qui aura toujours la même taille de fenêtres et de polices quelque soit le facteur d'échelle choisi (100%, 125%, 150%, ...), mais
si l'utilisateur utilise un facteur de 150% et exécute l'application, l'affichage de l'application est correct, mais
si l'utilisateur change de facteur d'échelle, par exemple 175%, l'affichage de l'application n'est plus correct.
Je n'arrive pas a retrouver la nouvelle valeur de l'échelle pour actualiser l'affichage de l'application.
Un exemple avec le code suivant:
Code : Tout sélectionner
;;; L'option 'Enable DPI aware executable (Windows and macOS)' doit être cochée."
EnableExplicit
#WinApp=1
Global X=300, Y=200
Define Event
Procedure.a SizeWindow()
Debug "EVENT SIZE WINDOWS"
Protected DC = GetDeviceCaps_(GetDC_(0),#LOGPIXELSX)
Debug "DC = " + DC
Debug "SX = " + DesktopScaledX(X)
Debug "SY = " + DesktopScaledY(Y)
Protected XDPI.d = DesktopResolutionX() : Debug "XDPI = " + XDPI
Protected YDPI.d = DesktopResolutionY() : Debug "YDPI = " + YDPI
Debug ""
ResizeWindow(#WinApp,#PB_Ignore,#PB_Ignore,DesktopScaledX(X), DesktopScaledY(Y))
EndProcedure
#FLAGS = #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget
If OpenWindow(#WinApp, 0, 0, DesktopScaledX(X), DesktopScaledY(Y), "Test DPI", #FLAGS)
SetWindowColor(#WinApp, #Black)
SmartWindowRefresh(#winApp, #True)
BindEvent(#PB_Event_SizeWindow, @sizeWindow())
Repeat
Event = WaitWindowEvent(50)
Until Event = #PB_Event_CloseWindow
EndIf
Changez le facteur d'échelle avec l'application lancée, et les résultats sont visibles dans le débogage lorsque vous essayez de changer la taille de la fenêtre.
Votre aide serez la bienvenue.
Merci a vous.
cage