Приветствую!
Решил изучить PureBasic и столкнулся с проблемой, как можно выставить размер MDIChild окна, без использования WinAPI.
Если используем MDIGadget и
AddGadgetItem(#MDIGadget, #MDIChild, "Внутреннее окно",0,#PB_Window_BorderLess | #PB_Window_SystemMenu | #PB_Window_TitleBar)
то окно создается громадное. Если к этому окну применить ResizeWindow(#MDIChild,286,203,400,200), то окно создается нужного размера, но возникает проблема дергания окна. Выглядит это безобразно и чудовищно.
Вопрос 1: Как можно корректно выставить размер MDIChild окна в данном случае без дергания?
----------------
Есть второй способ, открыть два окна с помощью функции OpenWindow:
; константы
Enumeration
#Main = 0
#MDIChild = 1
#MenuItem_New
EndEnumeration
; процедура внутреннего окна
Procedure Child()
OpenWindow(#MDIChild, 0, 0, 400, 200, "Внутреннее окно", #PB_Window_BorderLess |
#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_TitleBar,WindowID(#Main))
EndProcedure
; запускаем программу
If OpenWindow(#Main, 0, 0, 640, 480, "Главное окно", #PB_Window_SystemMenu |
#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget
| #PB_Window_Maximize)
SetWindowColor(#Main, $808080)
If CreateMenu(#Main, WindowID(#Main))
MenuTitle("Меню 1")
MenuTitle("Меню 2")
MenuItem(#MenuItem_New, "Подпункт 1")
MenuItem(1, "Подпункт 2")
EndIf
; цикл
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Main
End
Default
CloseWindow(EventWindow())
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #MenuItem_New
Child()
EndSelect
EndSelect
Until Quit = 1
EndIfЗдесь собственно все в порядке за одним исключением. Окно #MDIChild легко накрывает меню и выходит за пределы окна #Main.
Вопрос 2: Как сделать корректное MDI с помощью функции OpenWindow, чтобы окно #MDIChild не могла накрывать меню и выходить за пределы окна #Main ?



