
http://www.purearea.net/temp/CodeArchiv ... andling.pb
Das war mir zu umstaendlich, habe es deswegen schnell selber geschrieben
Code: Alles auswählen
;- MDI Example 4.02
Enumeration
#MAIN_WINDOW
EndEnumeration
Enumeration
#MDI_MAIN
EndEnumeration
Enumeration
#MAIN_MENU
EndEnumeration
Enumeration
#MENU_NEW
#MENU_OPEN
#MENU_SAVE
#MENU_SAVEAS
#MENU_CLOSE
#MENU_CLOSEALL
#MENU_EXIT
#MENU_CASCADE
#MENU_TILEH
#MENU_TILEV
#MENU_ARRANGE
#MENU_NEXT
#MENU_PREV
#MENU_NORMAL
#MENU_NORMALALL
#MENU_MAXIMIZE
#MENU_MAXIMIZEALL
#MENU_MINIMIZE
#MENU_MINIMIZEALL
#MENU_RESIZE_DEMO
#MENU_WINDOW_POS
EndEnumeration
define.l hwnd,event,window
Newlist MDI_WINDOW_LIST.l()
;-
Procedure NewMdiChild()
shared MDI_WINDOW_LIST.l()
AddElement(MDI_WINDOW_LIST())
MDI_WINDOW_LIST() = AddGadgetItem(#MDI_MAIN,#pb_any,"MDI - Childwindow")
ProcedureReturn MDI_WINDOW_LIST()
EndProcedure
Procedure CloseMdiChild(Child=-1)
shared MDI_WINDOW_LIST.l()
if Child = -1 ; alle schliessen
ForEach MDI_WINDOW_LIST()
Child = MDI_WINDOW_LIST()
CloseWindow(Child)
Next
ClearList(MDI_WINDOW_LIST())
else
ForEach MDI_WINDOW_LIST()
if Child = MDI_WINDOW_LIST()
CloseWindow(Child)
DeleteElement(MDI_WINDOW_LIST())
break
EndIf
Next
EndIf
EndProcedure
;-
hwnd = OpenWindow(#MAIN_WINDOW,#PB_Ignore,#PB_Ignore,640,480,"MDI-Test")
if CreateMenu(#MAIN_MENU,hwnd)
MenuTitle("File")
MenuItem(#MENU_NEW , "New" +Chr(9)+"Ctrl+N")
MenuItem(#MENU_OPEN , "Open" +Chr(9)+"Ctrl+O")
MenuItem(#MENU_SAVE , "Save" +Chr(9)+"Ctrl+S")
MenuItem(#MENU_SAVEAS , "Save as" )
MenuBar()
MenuItem(#MENU_CLOSE , "Close" +Chr(9)+"Ctrl+W")
MenuItem(#MENU_CLOSEALL , "Close all" )
MenuBar()
MenuItem(#MENU_EXIT , "Exit" +Chr(9)+"Alt+F4")
MenuTitle("Windows")
MenuItem(#MENU_CASCADE , "Cascade")
MenuItem(#MENU_TILEH , "Tile horizontally")
MenuItem(#MENU_TILEV , "Tile vertically")
MenuItem(#MENU_ARRANGE , "Arrange")
MenuBar()
MenuItem(#MENU_NEXT , "Next")
MenuItem(#MENU_PREV , "Previous")
MenuBar()
MenuItem(#MENU_NORMAL , "Restore")
MenuItem(#MENU_NORMALALL , "Restore all")
MenuItem(#MENU_MAXIMIZE , "Maximize")
MenuItem(#MENU_MAXIMIZEALL, "Maximize all")
MenuItem(#MENU_MINIMIZE , "Minimize")
MenuItem(#MENU_MINIMIZEALL, "Minimize all")
MenuBar()
MenuItem(#MENU_RESIZE_DEMO, "Resize Demo")
AddKeyboardShortcut(#MAIN_WINDOW,#PB_Shortcut_Control|#PB_Shortcut_N,#MENU_NEW)
AddKeyboardShortcut(#MAIN_WINDOW,#PB_Shortcut_Control|#PB_Shortcut_O,#MENU_OPEN)
AddKeyboardShortcut(#MAIN_WINDOW,#PB_Shortcut_Control|#PB_Shortcut_S,#MENU_SAVE)
AddKeyboardShortcut(#MAIN_WINDOW,#PB_Shortcut_Control|#PB_Shortcut_W,#MENU_CLOSE)
endif
CreateGadgetList(hwnd)
MDIGadget(#MDI_MAIN,#PB_Ignore,#PB_Ignore,640,480-MenuHeight(),1,#MENU_WINDOW_POS)
NewMdiChild()
;-
Repeat
event = WaitWindowEvent()
window = EventWindow()
If window = #MAIN_WINDOW ; events fuer das Hauptfenster
if event = #PB_Event_CloseWindow
end
EndIf
if event = #PB_Event_Menu
select EventMenu()
case #MENU_NEW
NewMdiChild()
case #MENU_OPEN
debug "not implemented"
case #MENU_SAVE
debug "not implemented"
case #MENU_SAVEAS
debug "not implemented"
case #MENU_CLOSE
window = GetGadgetState(#MDI_MAIN)
CloseMdiChild(window)
case #MENU_CLOSEALL
CloseMdiChild(-1)
case #MENU_EXIT
end
case #MENU_CASCADE
SetGadgetState(#MDI_MAIN,#PB_MDI_Cascade)
case #MENU_TILEH
SetGadgetState(#MDI_MAIN,#PB_MDI_TileHorizontally)
case #MENU_TILEV
SetGadgetState(#MDI_MAIN,#PB_MDI_TileVertically)
case #MENU_ARRANGE
SetGadgetState(#MDI_MAIN,#PB_MDI_Arrange)
case #MENU_NEXT
SetGadgetState(#MDI_MAIN,#PB_MDI_Next)
case #MENU_PREV
SetGadgetState(#MDI_MAIN,#PB_MDI_Previous)
case #MENU_NORMAL
window = GetGadgetState(#MDI_MAIN)
SetWindowState(window,#PB_Window_Normal)
case #MENU_NORMALALL
ForEach MDI_WINDOW_LIST()
window = MDI_WINDOW_LIST()
SetWindowState(window,#PB_Window_Normal)
Next
case #MENU_MAXIMIZE
window = GetGadgetState(#MDI_MAIN)
SetWindowState(window,#PB_Window_Maximize)
case #MENU_MAXIMIZEALL
ForEach MDI_WINDOW_LIST()
window = MDI_WINDOW_LIST()
SetWindowState(window,#PB_Window_Maximize)
Next
case #MENU_MINIMIZE
window = GetGadgetState(#MDI_MAIN)
SetWindowState(window,#PB_Window_Minimize)
case #MENU_MINIMIZEALL
ForEach MDI_WINDOW_LIST()
window = MDI_WINDOW_LIST()
SetWindowState(window,#PB_Window_Minimize)
Next
case #MENU_RESIZE_DEMO
window = GetGadgetState(#MDI_MAIN)
if iswindow(window)
ResizeWindow(window,#PB_Ignore,#PB_Ignore,random(400)+100,random(400)+100)
EndIf
EndSelect
EndIf
else ; andere Fenster
select event
case #WM_SYSCOMMAND ; wenn das fenster ueber das eigene Menu geschlossen wird.
if EventwParam() = #SC_CLOSE
CloseMdiChild(window)
EndIf
case #PB_Event_CloseWindow
CloseMdiChild(window)
EndSelect
EndIf
ForEver