Приветствую!
Решил изучить 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 ?