Ich hoffe jemand kann mir helfen.
Ich hab den guten Code von Stefan aus dem Winapi Library Tool genommen, und nach dem
resizen der Appbar viel mir auf, daß der Arbeitsbereich nicht automatisch angepasst wird daß passiert nur beim erstellen der AppBar.
Hab schon gestern etwas rumprobiert (in der CreateAPPBar Prozedure, und auf MSDN nachgelesen) aber ich komm einfach nicht dahinter, wie ich das managen
kann, daß nicht noch eine AppBar erstellt wird, sondern die AppBar angepasst, und dann halt der Arbeitsbereich ausgerichtet wird.
Der Code unten ist unmodifiziert, bis auf die Ausrichtung und Größe der AppBar, und halt
ein ResizeWindow Befehl beim ersten Button von links.
Code: Alles auswählen
;Autor: Stefan
EnableExplicit
Define EventID
Define *APPBD.APPBARDATA
Define X
Define Y
Define Width
Define Height
Procedure CreateAPPBar(Edge,Size); unterstützt #ABE_LEFT,#ABE_RIGHT,#ABE_TOP,#ABE_BOTTOM für Edge
Protected *APPBD.APPBARDATA=AllocateMemory(SizeOf(APPBARDATA))
Protected TBD.APPBARDATA
SHAppBarMessage_(#ABM_GETTASKBARPOS,TBD)
Protected TBEdge=TBD\uEdge
SHAppBarMessage_(#ABM_NEW,*APPBD)
*APPBD\uEdge=Edge
Select Edge
Case #ABE_LEFT
If TBEdge=Edge
*APPBD\rc\Left=TBD\rc\Right
*APPBD\rc\Right=TBD\rc\Right+Size
*APPBD\rc\Top=0
*APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
Else
*APPBD\rc\Left=0
*APPBD\rc\Right=Size
*APPBD\rc\Top=0
*APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
EndIf
Case #ABE_RIGHT
If TBEdge=Edge
*APPBD\rc\Left=TBD\rc\Left-Size
*APPBD\rc\Right=TBD\rc\Left
*APPBD\rc\Top=0
*APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
Else
*APPBD\rc\Left=GetSystemMetrics_(#SM_CXSCREEN)-Size
*APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
*APPBD\rc\Top=0
*APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
EndIf
Case #ABE_TOP
If TBEdge=Edge
*APPBD\rc\Left=0
*APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
*APPBD\rc\Top=TBD\rc\Bottom
*APPBD\rc\Bottom=TBD\rc\Bottom+Size
Else
*APPBD\rc\Left=0
*APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
*APPBD\rc\Top=0
*APPBD\rc\Bottom=Size
EndIf
Case #ABE_BOTTOM
If TBEdge=Edge
*APPBD\rc\Left=0
*APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
*APPBD\rc\Top=TBD\rc\Top-Size
*APPBD\rc\Bottom=TBD\rc\Top
Else
*APPBD\rc\Left=0
*APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
*APPBD\rc\Top=GetSystemMetrics_(#SM_CYSCREEN)-Size
*APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
EndIf
EndSelect
SHAppBarMessage_(#ABM_SETPOS,*APPBD)
ProcedureReturn *APPBD
EndProcedure
Procedure RemoveAPPBar(*APPBD.APPBARDATA)
SHAppBarMessage_(#ABM_REMOVE,*APPBD)
FreeMemory(*APPBD)
EndProcedure
Procedure APPBarX(*APPBD.APPBARDATA)
ProcedureReturn *APPBD\rc\Left
EndProcedure
Procedure APPBarY(*APPBD.APPBARDATA)
ProcedureReturn *APPBD\rc\Top
EndProcedure
Procedure APPBarWidth(*APPBD.APPBARDATA)
ProcedureReturn *APPBD\rc\Right-*APPBD\rc\Left
EndProcedure
Procedure APPBarHeight(*APPBD.APPBARDATA)
ProcedureReturn *APPBD\rc\Bottom-*APPBD\rc\Top
EndProcedure
*APPBD.APPBARDATA=CreateAPPBar(#ABE_TOP,40) ; AppBar am linken Rand erstellen
X=APPBarX(*APPBD)
Y=APPBarY(*APPBD)
Width=APPBarWidth(*APPBD)
Height=APPBarHeight(*APPBD)
If OpenWindow(0,X,Y,Width,Height,"Window",#PB_Window_BorderLess)
ButtonImageGadget(2,10,0,60,30,LoadIcon_(0,100))
ButtonImageGadget(3,80,0,60,30,LoadIcon_(0,100))
ButtonImageGadget(4,160,0,60,30,LoadIcon_(0,100))
ButtonImageGadget(5,230,0,60,30,LoadIcon_(0,103))
SetWindowPos_(WindowID(0),#HWND_TOPMOST,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
Select EventGadget()
Case 2
ResizeWindow(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,60)
Case 5
EventID = #PB_Event_CloseWindow
EndSelect
EndIf
If EventID = #PB_Event_CloseWindow
RemoveAPPBar(*APPBD) ; AppBar entfernen
End
EndIf
ForEver
EndIf