Windowgrösse
- sharkpeter
- Beiträge: 474
- Registriert: 29.08.2004 16:18
- Wohnort: Dresden
- Kontaktdaten:
Re: Windowgrösse
Hallo zusammen,
den hier mal wieder ausbuddel ...
Da es hier recht gut her passt, folgende Frage:
Hat jemand eine Ahnung, wie man die Breite des Rahmens mit aktivem
Style herausbekommt? Dazu zählt freilich auch die der Titlebar.
Sämtliche Versuche die ich bisher gemacht habe, führen immer nur
zu den Werten für die klassische Darstellung ...
Gruß Jens
den hier mal wieder ausbuddel ...
Da es hier recht gut her passt, folgende Frage:
Hat jemand eine Ahnung, wie man die Breite des Rahmens mit aktivem
Style herausbekommt? Dazu zählt freilich auch die der Titlebar.
Sämtliche Versuche die ich bisher gemacht habe, führen immer nur
zu den Werten für die klassische Darstellung ...
Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64
Nichts wissen macht nichts, sich dumm stellen aber schon.
Nichts wissen macht nichts, sich dumm stellen aber schon.
Re: Windowgrösse
Code: Alles auswählen
Procedure CallBack(hWnd, Msg, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If Msg = #WM_MOVE Or Msg = #WM_SIZE
WW = WindowWidth(0)
WH = WindowHeight(0)
ResizeGadget(0, -1, -1, WW - 10, WH - 10)
SetGadgetItemText(0, 0, Str(WindowX(0)), 1)
SetGadgetItemText(0, 1, Str(WindowY(0)), 1)
SetGadgetItemText(0, 2, Str(WW), 1)
SetGadgetItemText(0, 3, Str(WH), 1)
MyRect.RECT
GetWindowRect_(WindowID(0), @MyRect)
SetGadgetItemText(0, 4, Str(MyRect\Left), 1)
SetGadgetItemText(0, 5, Str(MyRect\Top), 1)
SetGadgetItemText(0, 6, Str(MyRect\Right), 1)
SetGadgetItemText(0, 7, Str(MyRect\Bottom), 1)
SetGadgetItemText(0, 8, Str(MyRect\Right - MyRect\Left), 1)
SetGadgetItemText(0, 9, Str(MyRect\Bottom - MyRect\Top), 1)
MyPoint.POINT
ClientToScreen_(WindowID(0), @MyPoint)
SetGadgetItemText(0, 10, Str(MyPoint\X), 1)
SetGadgetItemText(0, 11, Str(MyPoint\Y), 1)
SetGadgetItemText(0, 12, Str(MyPoint\X - MyRect\Left), 1)
SetGadgetItemText(0, 13, Str(MyPoint\Y - MyRect\Top), 1)
MyPlacement.WINDOWPLACEMENT
GetWindowPlacement_(WindowID(0), @MyPlacement)
SetGadgetItemText(0, 14, Str(MyPlacement\length), 1)
SetGadgetItemText(0, 15, Str(MyPlacement\flags), 1)
SetGadgetItemText(0, 16, Str(MyPlacement\showCmd), 1)
SetGadgetItemText(0, 17, Str(MyPlacement\ptMinPosition\X) + " " + Str(MyPlacement\ptMinPosition\Y), 1)
SetGadgetItemText(0, 18, Str(MyPlacement\ptMaxPosition\X) + " " + Str(MyPlacement\ptMinPosition\Y), 1)
SetGadgetItemText(0, 19, Str(MyPlacement\rcNormalPosition\Left), 1)
SetGadgetItemText(0, 20, Str(MyPlacement\rcNormalPosition\Top), 1)
SetGadgetItemText(0, 21, Str(MyPlacement\rcNormalPosition\Right), 1)
SetGadgetItemText(0, 22, Str(MyPlacement\rcNormalPosition\Bottom), 1)
EndIf
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 350, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
ListIconGadget(0, 5, 5, 0, 0, "Attributes", 140, #PB_ListIcon_GridLines)
AddGadgetColumn(0, 1, "Value", 51)
AddGadgetColumn(0, 2, "API", 150)
#Eol = Chr(10)
AddGadgetItem(0, -1, "WindowX()" + #Eol + #Eol + "Purebasic")
AddGadgetItem(0, -1, "WindowY()" + #Eol + #Eol + "Purebasic")
AddGadgetItem(0, -1, "WindowWidth()" + #Eol + #Eol + "Purebasic")
AddGadgetItem(0, -1, "WindowHeight()" + #Eol + #Eol + "Purebasic")
AddGadgetItem(0, -1, "Rect\Left" + #Eol + #Eol + "GetWindowRect_()")
AddGadgetItem(0, -1, "Rect\Top" + #Eol + #Eol + "GetWindowRect_()")
AddGadgetItem(0, -1, "Rect\Right" + #Eol + #Eol + "GetWindowRect_()")
AddGadgetItem(0, -1, "Rect\Bottom" + #Eol + #Eol + "GetWindowRect_()")
AddGadgetItem(0, -1, "Rect Width" + #Eol + #Eol + "GetWindowRect_()")
AddGadgetItem(0, -1, "Rect Height" + #Eol + #Eol + "GetWindowRect_()")
AddGadgetItem(0, -1, "Client X" + #Eol + #Eol + "ClientToScreen_()")
AddGadgetItem(0, -1, "Client Y" + #Eol + #Eol + "ClientToScreen_()")
AddGadgetItem(0, -1, "Border X" + #Eol + #Eol + "ClientToScreen_()")
AddGadgetItem(0, -1, "Title Height" + #Eol + #Eol + "ClientToScreen_()")
AddGadgetItem(0, -1, "length" + #Eol + #Eol + "GetWindowPlacement_()")
AddGadgetItem(0, -1, "flags" + #Eol + #Eol + "GetWindowPlacement_()")
AddGadgetItem(0, -1, "showCmd" + #Eol + #Eol + "GetWindowPlacement_()")
AddGadgetItem(0, -1, "ptMinPosition" + #Eol + #Eol + "GetWindowPlacement_()")
AddGadgetItem(0, -1, "ptMaxPosition" + #Eol + #Eol + "GetWindowPlacement_()")
AddGadgetItem(0, -1, "rcNormalPosition\Left" + #Eol + #Eol + "GetWindowPlacement_()")
AddGadgetItem(0, -1, "rcNormalPosition\Top" + #Eol + #Eol + "GetWindowPlacement_()")
AddGadgetItem(0, -1, "rcNormalPosition\Right" + #Eol + #Eol + "GetWindowPlacement_()")
AddGadgetItem(0, -1, "rcNormalPosition\Bottom" + #Eol + #Eol + "GetWindowPlacement_()")
SetWindowCallback(@CallBack())
CallBack(WindowID(0), #WM_SIZE, 0, 0)
Repeat : Until WaitWindowEvent() = #WM_CLOSE
EndIf- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Windowgrösse
Für die Titelzeile sollte dies eigentlich reichen:
Code: Alles auswählen
EnableExplicit
OpenWindow(0, #PB_Ignore, #PB_Ignore, 400, 200, "Test")
Define r.rect, hwnd = WindowID(0)
GetWindowRect_(hwnd,r.rect)
Debug r\bottom - r\top - WindowHeight(0) - GetSystemMetrics_(#SM_CYFRAME)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindowPureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Windowgrösse
@ts-soft
Dein Code sagt bei mir 19px, obwohl meine Titelleiste 23px hoch ist:

Dein Code sagt bei mir 19px, obwohl meine Titelleiste 23px hoch ist:

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Windowgrösse
Okay, den Frame noch halbieren, dann stimmts 
Zumindest solange kein Menü existiert
Zumindest solange kein Menü existiert
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- sharkpeter
- Beiträge: 474
- Registriert: 29.08.2004 16:18
- Wohnort: Dresden
- Kontaktdaten:
Re: Windowgrösse
Hallo RSBasic und TS,
erst mal danke für die Hinweise.
@RSBasic, hatte auch in deinem Tool "WinApiLibrary" geschaut. Bin
aber nicht fündig geworden.
Aber vielleicht kannst du das folgende dort aufnehmen, habe es mit
mehreren verschiedenen Designs und Auflösungen probiert, konnte
keine Fehler feststellen (Mir ging/geht es um die Anordnung von
Fenstern)
@TS, der Hinweis bzw. der Testcode mit GetSystemMetrics_() hat
mich auf den richtigen Weg gelenkt
Hier nun der Code:
Gruß Jens
erst mal danke für die Hinweise.
@RSBasic, hatte auch in deinem Tool "WinApiLibrary" geschaut. Bin
aber nicht fündig geworden.
Aber vielleicht kannst du das folgende dort aufnehmen, habe es mit
mehreren verschiedenen Designs und Auflösungen probiert, konnte
keine Fehler feststellen (Mir ging/geht es um die Anordnung von
Fenstern)
@TS, der Hinweis bzw. der Testcode mit GetSystemMetrics_() hat
mich auf den richtigen Weg gelenkt
Hier nun der Code:
Code: Alles auswählen
; Höhe Fenstertitlebalken ermitteln
Procedure.i GetTitleBarHeightn()
; lokale Variable deklarieren
Protected ret.i
; bei klassischer Darstellung immer 4 als Rückgabe
If GetSystemMetrics_(#SM_CXSIZEFRAME) = 4
ret = GetSystemMetrics_(#SM_CYSIZE)
ret + GetSystemMetrics_(#SM_CXEDGE)
ret + GetSystemMetrics_(#SM_CXBORDER)
Else
ret = GetSystemMetrics_(#SM_CYSIZE)
ret + GetSystemMetrics_(#SM_CXSIZEFRAME)
EndIf
ProcedureReturn ret
EndProcedure
; Fensterrahmenbreite links, rechts und unten
Procedure.i GetBorderWidth()
; lokale Variable deklarieren
Protected ret.i
; bei klassischer Darstellung immer 4 als Rückgabe
If GetSystemMetrics_(#SM_CXSIZEFRAME) = 4
ret = GetSystemMetrics_(#SM_CXBORDER)
ret + GetSystemMetrics_(#SM_CXEDGE)
Else
ret = GetSystemMetrics_(#SM_CXSIZEFRAME)
EndIf
ProcedureReturn ret
EndProcedure
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64
Nichts wissen macht nichts, sich dumm stellen aber schon.
Nichts wissen macht nichts, sich dumm stellen aber schon.

