func fitRectToScreen(hWnd win.HWND, r Rectangle) Rectangle { var mi win.MONITORINFO mi.CbSize = uint32(unsafe.Sizeof(mi)) if !win.GetMonitorInfo(win.MonitorFromWindow( hWnd, win.MONITOR_DEFAULTTOPRIMARY), &mi) { return r } mon := rectangleFromRECT(mi.RcWork) mon.Height -= int(win.GetSystemMetrics(win.SM_CYCAPTION)) if r.Width <= mon.Width { switch { case r.X < mon.X: r.X = mon.X case r.X+r.Width > mon.X+mon.Width: r.X = mon.X + mon.Width - r.Width } } if r.Height <= mon.Height { switch { case r.Y < mon.Y: r.Y = mon.Y case r.Y+r.Height > mon.Y+mon.Height: r.Y = mon.Y + mon.Height - r.Height } } return r }
func (mw *MainWindow) SetFullscreen(fullscreen bool) error { if fullscreen == mw.Fullscreen() { return nil } if fullscreen { var mi win.MONITORINFO mi.CbSize = uint32(unsafe.Sizeof(mi)) if mw.windowPlacement == nil { mw.windowPlacement = new(win.WINDOWPLACEMENT) } if !win.GetWindowPlacement(mw.hWnd, mw.windowPlacement) { return lastError("GetWindowPlacement") } if !win.GetMonitorInfo(win.MonitorFromWindow( mw.hWnd, win.MONITOR_DEFAULTTOPRIMARY), &mi) { return newError("GetMonitorInfo") } if err := mw.ensureStyleBits(win.WS_OVERLAPPEDWINDOW, false); err != nil { return err } if r := mi.RcMonitor; !win.SetWindowPos( mw.hWnd, win.HWND_TOP, r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top, win.SWP_FRAMECHANGED|win.SWP_NOOWNERZORDER) { return lastError("SetWindowPos") } } else { if err := mw.ensureStyleBits(win.WS_OVERLAPPEDWINDOW, true); err != nil { return err } if !win.SetWindowPlacement(mw.hWnd, mw.windowPlacement) { return lastError("SetWindowPlacement") } if !win.SetWindowPos(mw.hWnd, 0, 0, 0, 0, 0, win.SWP_FRAMECHANGED|win.SWP_NOMOVE| win.SWP_NOOWNERZORDER|win.SWP_NOSIZE|win.SWP_NOZORDER) { return lastError("SetWindowPos") } } return nil }