Ghosty1967 hat geschrieben:Nun hätte ich ganz gerne, das die Anwendungen, welche ich über meine "Sidebar" aufrufe zwar maximiert
aber trotzdem in der Breite begrentzt geöffnet werden. Meine "Sidebar" steht dabei immer am rechten Rand
des Bildschirms und hat immer die gleiche feste Breite.
Wenn ich also ein Fenster maximiere sollte der Bereich der "Sidebar" nicht von irgendeinem Fenster
überdeckt werden. (Ähnlich dem Verhalten zwischen Fenstern und der Taskleiste).
Du mußt Deine Sidebar bei Windows registrieren.
edel gab schon einen Hinweis, aber da die anderen zwei Tipps in die falsche Richtung gehen,
hier mal ein Beispiel:
Code: Alles auswählen
EnableExplicit
Structure sAppBar
edge.i
size.i
title.s
AppBar.APPBARDATA
EndStructure
Procedure.l RegisterAppBar( WindowID.i, fRegister.l )
Protected abd.APPBARDATA
abd\cbSize = SizeOf(APPBARDATA)
abd\hwnd = WindowID
If fRegister
abd\uCallbackMessage = #WM_USER+1
If Not SHAppBarMessage_(#ABM_NEW,@abd)
ProcedureReturn #False
EndIf
Else
SHAppBarMessage_(#ABM_REMOVE,@abd)
EndIf
ProcedureReturn #True
EndProcedure
Procedure AppBarQuerySetPos( *bar.sAppBar )
SHAppBarMessage_(#ABM_QUERYPOS,@*bar\AppBar)
SHAppBarMessage_(#ABM_SETPOS ,@*bar\AppBar)
With *bar\AppBar
;MoveWindow_( \hwnd, \rc\left, \rc\top, \rc\right - \rc\left, \rc\bottom - \rc\top, #True )
EndWith
EndProcedure
Procedure.i CreateAppBar( *bar.sAppBar )
Protected WorkArea.RECT
Protected x,y,w,h, win
If Not *bar : ProcedureReturn 0 : EndIf
SystemParametersInfo_(#SPI_GETWORKAREA,0,@WorkArea,0)
Select *bar\edge
Case #ABE_RIGHT
x = WorkArea\right - *bar\size
;y = 0
w = *bar\size
h = WorkArea\bottom
Case #ABE_LEFT
;x = 0
;y = 0
w = *bar\size
h = WorkArea\bottom
Case #ABE_TOP
w = WorkArea\right
h = *bar\size
Case #ABE_BOTTOM
;x = 0
y = WorkArea\bottom - *bar\size
w = WorkArea\right
h = *bar\size
Default
EndSelect
win = OpenWindow(#PB_Any,x,y,w,h,*bar\title,#PB_Window_Tool);|#PB_Window_Invisible)
SetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE,#WS_EX_TOOLWINDOW|#WS_EX_TOPMOST)
SetWindowLongPtr_(WindowID(win),#GWL_STYLE,#WS_VISIBLE|#WS_POPUP)
MoveWindow_(WindowID(win),x,y,w,h, #True )
;HideWindow(win,0)
;UpdateWindow_( WindowID(win) )
With *bar\AppBar
\hwnd = WindowID( win )
\rc\left = x
\rc\top = y
\rc\right = x+w
\rc\bottom = h
\uEdge = *bar\edge
EndWith
RegisterAppBar( WindowID(win), #True )
AppBarQuerySetPos( *bar )
UpdateWindow_( WindowID(win) )
ProcedureReturn win
EndProcedure
;
; Program
;
Define win, exit, quit
Define bar.sAppBar
bar\edge = #ABE_RIGHT
bar\size = 100
bar\title = "My AppBar"
win = CreateAppBar( @bar )
exit = ButtonGadget(#PB_Any,10,10,80,25,"eXit")
Repeat
Select WindowEvent()
Case #PB_Event3D_CloseWindow
quit = #True
Case #PB_Event_Gadget
If EventGadget() = exit
quit = #True
EndIf
EndSelect
Until quit = #True
RegisterAppBar( WindowID(win), #False )
Das funktioniert dann nicht nur mit Programmen die Du aus Deiner Toolbar heraus startest,
sondern auch mit anderen maximierten Fenstern.