func (fb *FormBase) SaveState() error { if err := fb.clientComposite.SaveState(); err != nil { return err } var wp win.WINDOWPLACEMENT wp.Length = uint32(unsafe.Sizeof(wp)) if !win.GetWindowPlacement(fb.hWnd, &wp) { return lastError("GetWindowPlacement") } state := fmt.Sprint( wp.Flags, wp.ShowCmd, wp.PtMinPosition.X, wp.PtMinPosition.Y, wp.PtMaxPosition.X, wp.PtMaxPosition.Y, wp.RcNormalPosition.Left, wp.RcNormalPosition.Top, wp.RcNormalPosition.Right, wp.RcNormalPosition.Bottom) if err := fb.putState(state); err != nil { return err } return nil }
func (fb *FormBase) RestoreState() error { if fb.isInRestoreState { return nil } fb.isInRestoreState = true defer func() { fb.isInRestoreState = false }() state, err := fb.getState() if err != nil { return err } if state == "" { return nil } var wp win.WINDOWPLACEMENT if _, err := fmt.Sscan(state, &wp.Flags, &wp.ShowCmd, &wp.PtMinPosition.X, &wp.PtMinPosition.Y, &wp.PtMaxPosition.X, &wp.PtMaxPosition.Y, &wp.RcNormalPosition.Left, &wp.RcNormalPosition.Top, &wp.RcNormalPosition.Right, &wp.RcNormalPosition.Bottom); err != nil { return err } wp.Length = uint32(unsafe.Sizeof(wp)) if !win.SetWindowPlacement(fb.hWnd, &wp) { return lastError("SetWindowPlacement") } return fb.clientComposite.RestoreState() }