To preserve window position & size the special values associated with Minimized and Maximized windows must be avoided.
The window size variable StrMainS must be included in the Preserve User Settings Code Snippet.
DoDefaultSettings() includes StrMainS = "200x100" or whatever initial size is required.
DoLoadSettings() includes StrMainS = strLoadLocal("MainS",StrMainS)
DoSaveSettings() includes doSaveLocal("MainS",StrMainS)
Requires: iuplua and Code Snippets Preserve User Settings and Split A String Into Numbers Using Separators.
Code
-
require "iuplua" -- To access GUI window builder -- Flag if GUI Window is Normal rather than Minimised or Maximised -- function IsNormalWindow(dialogGUI) -- tblScrn[1] = origin x, tblScrn[2] = origin y, tblScrn[3] = width, tblScrn[4] = height local tblPosn = dialogGUI.screenposition:SplitNumbers() local intPosX = tblPosn[1] local intPosY = tblPosn[2] if intPosX < 0 and intPosY < 0 then -- If origin is negative (-8, -8 = Maximised, -3200, -3200 = Minimised) return false -- then is Maximised or Minimised end return true end -- function IsNormalWindow IntMainX = iup.CENTER IntMainY = iup.CENTER StrMainS = "200x100" local btnClose = iup.button { title = "Close Window", action = function() return iup.CLOSE end } local dialogue = iup.dialog { title = "Snippet", startfocus = btnClose, rastersize = StrMainS, btnClose, move_cb = function(self,x,y) if IsNormalWindow(self) then IntMainX=x IntMainY=y end end, resize_cb = function(self) if IsNormalWindow(self) then StrMainS=self.rastersize end end, close_cb = btnClose.action, } dialogue:showxy(IntMainX,IntMainY) dialogue.rastersize=nil -- Allow window to be resized if (iup.MainLoopLevel()==0) then iup.MainLoop() end