Gadget auf Realgröße skalieren.. Aber wie
Verfasst: 02.02.2017 22:48
Eine Frage an die Profi's hier:
Ich möchte ein beliebiges (hier im Beispiel ein Canvasgadget) auf eine reale Größe skalieren.
Soll heißen wenn ich ein Lineal auf den Bildschirm lege soll das Gadget die Maße haben die ich angebe (in mm).
Im Beispiel unten soll das Gadget 170 mm breit und 200 mm hoch sein.
Ich rechne also zB die Breite in Inches um und multipliziere das dann mit dem Ergebnis aus GetDeviceCaps_(lhDC, #LOGPIXELSX).
Das dabei erzielte Ergebnis ergibt immer ein zu großes Gadget beim nachmessen mit dem Lineal auf dem Screen.
Beim rumprobieren mit verschieden Werten anstelle des GetDeviceCaps_(lhDC, #LOGPIXELSX) hab ich herausgefunden das der Wert 82
immer korrekte Werte liefert. Das ist zwar schön und würde mein Problem lösen, ich würde aber gerne wissen warum das so ist,
bzw. warum GetDeviceCaps_(lhDC, #LOGPIXELSX) nicht funktioniert bzw. ein falsches Ergenis liefert.
Oder anders gesagt, wo ist mein Denkfehler?
Ich code noch nicht so lange mit PB, also vergebt mir meine Unwissenheit ..
LG, Stefan
Ich möchte ein beliebiges (hier im Beispiel ein Canvasgadget) auf eine reale Größe skalieren.
Soll heißen wenn ich ein Lineal auf den Bildschirm lege soll das Gadget die Maße haben die ich angebe (in mm).
Im Beispiel unten soll das Gadget 170 mm breit und 200 mm hoch sein.
Ich rechne also zB die Breite in Inches um und multipliziere das dann mit dem Ergebnis aus GetDeviceCaps_(lhDC, #LOGPIXELSX).
Das dabei erzielte Ergebnis ergibt immer ein zu großes Gadget beim nachmessen mit dem Lineal auf dem Screen.
Beim rumprobieren mit verschieden Werten anstelle des GetDeviceCaps_(lhDC, #LOGPIXELSX) hab ich herausgefunden das der Wert 82
immer korrekte Werte liefert. Das ist zwar schön und würde mein Problem lösen, ich würde aber gerne wissen warum das so ist,
bzw. warum GetDeviceCaps_(lhDC, #LOGPIXELSX) nicht funktioniert bzw. ein falsches Ergenis liefert.
Oder anders gesagt, wo ist mein Denkfehler?
Ich code noch nicht so lange mit PB, also vergebt mir meine Unwissenheit ..
LG, Stefan
Code: Alles auswählen
; ---------------------------------------
; project
; name: gadget screen size test
; date: 31.01.2017
; author: S.D.A.
; lang: PB (5.51 Windows X64)
; tested
; purpose: na
; ---------------------------------------
EnableExplicit ; the magic one
; different window id's
Enumeration 0 Step 1
#MAIN_WINDOWID ; window ID of test screen
EndEnumeration
; different gadget id's
Enumeration 0 Step 1
#GAD_CANVAS_01
EndEnumeration
; vars
Define.i iEvent = 0 ; WindowEvent
Define.i iQuit = 0 ; 1== Quits the event loop and terminates program
Define.i iCurX, iCurY, iGad, iGadFlags ; gadget init stuff
Define.i iWidth, iHeight ; gadget init stuff
Define.l lhDC ; ->
Define.s sMsg = "" ; teststring
; const
#INCH_MM = 25.40 ; 1 inch = 25.4 mm
; -------------------------------------------------------------------------------
sMsg = "PureBasic Gadget size Test Window"
If OpenWindow(0, 100, 200, 195, 260, sMsg, #PB_Window_SystemMenu | #PB_Window_Maximize)
lhDC = GetDC_(#Null) ; retrieves device context for the entire screen
; create gadget(s)
iCurX = 100
iCurY = 50
iWidth = (170.00 / #INCH_MM) * GetDeviceCaps_(lhDC, #LOGPIXELSX) ; zu groß (ergebnis von GetDeviceCaps_(lhDC, #LOGPIXELSX) = 96
iWidth = (170.00 / #INCH_MM) * 82 ; dieser Wert funktioniert, ABER WARUM ??
iHeight = (200.00 / #INCH_MM) * GetDeviceCaps_(lhDC, #LOGPIXELSY) ; zu groß (ergebnis von GetDeviceCaps_(lhDC, #LOGPIXELSY) = 96
iHeight = (200.00 / #INCH_MM) * 82 ; dieser Wert funktioniert, ABER WARUM ??
iGad = #GAD_CANVAS_01
iGadFlags = #Null
CanvasGadget(iGad, iCurX, iCurY, iWidth,iHeight, iGadFlags)
Repeat
iEvent = WaitWindowEvent()
If iEvent = #PB_Event_CloseWindow
iQuit = 1
EndIf
Until iQuit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic