protected override WindowStylePlacement GetWindowStylePlacement(WindowState state) { WindowStylePlacement windowStyle = new WindowStylePlacement(_options); if (_options.UseCustomStyle && _options != null && _options.CustomStyle.IsValid()) { return(GetWindowStyles(_options.CustomStyle, state)); } var styles = WS.OVERLAPPEDWINDOW | WS.CLIPCHILDREN | WS.CLIPSIBLINGS; var exStyles = WS_EX.APPWINDOW | WS_EX.WINDOWEDGE | WS_EX.TRANSPARENT; windowStyle.Styles = styles; windowStyle.ExStyles = exStyles; windowStyle.RECT = GetWindowBounds(); switch (state) { case WindowState.Normal: windowStyle.ShowCommand = SW.SHOWNORMAL; break; case WindowState.Maximize: windowStyle.Styles |= WS.MAXIMIZE; windowStyle.ShowCommand = SW.SHOWMAXIMIZED; break; default: windowStyle.ShowCommand = SW.SHOWNORMAL; break; } return(windowStyle); }
protected WindowStylePlacement GetWindowStyles(WindowCustomStyle customCreationStyle, WindowState state) { WindowStylePlacement windowStyle = new WindowStylePlacement(_options); var styles = (WS)customCreationStyle.WindowStyles; var exStyles = (WS_EX)customCreationStyle.WindowExStyles; windowStyle.Styles = styles; windowStyle.ExStyles = exStyles; windowStyle.RECT = GetWindowBounds(); switch (state) { case WindowState.Normal: windowStyle.ShowCommand = SW.SHOWNORMAL; break; case WindowState.Maximize: windowStyle.Styles |= WS.MAXIMIZE; windowStyle.ShowCommand = SW.SHOWMAXIMIZED; break; case WindowState.Fullscreen: windowStyle.ShowCommand = SW.SHOWMAXIMIZED; break; default: break; } return(windowStyle); }
public unsafe virtual void CreateWindow() { _keyboadHandler?.SetNativeHost(this); _windowFrameless = _options.WindowFrameless; _wndProc = WndProc; _consoleParentInstance = GetConsoleWindow(); _options.WindowState = (_options.Fullscreen || _options.KioskMode) ? WindowState.Fullscreen : _options.WindowState; _windoStylePlacement = new WindowStylePlacement(_options); User32.WNDCLASS wcex = new User32.WNDCLASS(); wcex.style = User32.CS.HREDRAW | User32.CS.VREDRAW; wcex.lpfnWndProc = Marshal.GetFunctionPointerForDelegate(_wndProc); wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hIcon = GetIconHandle(); wcex.hCursor = User32.LoadCursorW(IntPtr.Zero, (IntPtr)CursorResourceId.IDC_ARROW); wcex.hbrBackground = Gdi32.GetStockObject(Gdi32.StockObject.WHITE_BRUSH); wcex.lpszMenuName = null; wcex.hInstance = _consoleParentInstance; fixed(char *c = Chromely_WINDOW_CLASS) { wcex.lpszClassName = c; } if (User32.RegisterClassW(ref wcex) == 0) { Logger.Instance.Log.LogError("Chromelywindow registration failed"); return; } var stylePlacement = GetWindowStylePlacement(_options.WindowState); var hWnd = User32.CreateWindowExW( stylePlacement.ExStyles, Chromely_WINDOW_CLASS, _options.Title, stylePlacement.Styles, stylePlacement.RECT.left, stylePlacement.RECT.top, stylePlacement.RECT.Width, stylePlacement.RECT.Height, IntPtr.Zero, IntPtr.Zero, _consoleParentInstance, null); if (hWnd == IntPtr.Zero) { Logger.Instance.Log.LogError("Chromelywindow creation failed"); return; } PlaceWindow(hWnd, stylePlacement); InstallHooks(hWnd); ShowWindow(hWnd, stylePlacement.ShowCommand); UpdateWindow(hWnd); RegisterHotKeys(hWnd); }
protected virtual void ToggleFullscreen(IntPtr hWnd) { bool isWindowed = IsWindowed(hWnd); if (isWindowed) { WINDOWPLACEMENT wpPrev; var placement = GetWindowPlacement(hWnd, out wpPrev); if (placement == BOOL.TRUE) { if (_windoStylePlacement == null) { _windoStylePlacement = new WindowStylePlacement(); } _windoStylePlacement.WindowPlacement = wpPrev; var styles = _windoStylePlacement.FullscreenStyles; var exStyles = _windoStylePlacement.FullscreenExStyles; SetWindowFullscreen(hWnd, (int)styles, (int)exStyles); _options.WindowState = WindowState.Fullscreen; ShowWindow(hWnd, SW.SHOWMAXIMIZED); UpdateWindow(hWnd); } } else { if (_windoStylePlacement != null) { SetWindowLong(hWnd, GWL.STYLE, (IntPtr)_windoStylePlacement.Styles); SetWindowLong(hWnd, GWL.EXSTYLE, (IntPtr)_windoStylePlacement.ExStyles); var placement = _windoStylePlacement.WindowPlacement; SetWindowPlacement(hWnd, ref placement); SetWindowPos(hWnd, IntPtr.Zero, 0, 0, 0, 0, SWP.NOMOVE | SWP.NOSIZE | SWP.NOZORDER | SWP.NOOWNERZORDER | SWP.FRAMECHANGED); _options.WindowState = WindowState.Normal; ShowWindow(hWnd, SW.SHOWNORMAL); UpdateWindow(hWnd); } else { _windoStylePlacement = new WindowStylePlacement(_options); WS styles = _windoStylePlacement.Styles; WS_EX exStyles = _windoStylePlacement.ExStyles; SetWindowLong(hWnd, GWL.STYLE, (IntPtr)styles); SetWindowLong(hWnd, GWL.EXSTYLE, (IntPtr)exStyles); _options.WindowState = WindowState.Maximize; ShowWindow(hWnd, SW.SHOWMAXIMIZED); UpdateWindow(hWnd); } } }
protected override WindowStylePlacement GetWindowStylePlacement(WindowState state) { WindowStylePlacement windowStylePlacement = base.GetWindowStylePlacement(state); if (!_windowFrameless) { return(windowStylePlacement); } windowStylePlacement.Styles = WS.POPUPWINDOW | WS.CLIPCHILDREN | WS.CLIPSIBLINGS | WS.SIZEBOX | WS.MINIMIZEBOX | WS.MAXIMIZEBOX; return(windowStylePlacement); }
protected virtual void PlaceWindow(IntPtr hWnd, WindowStylePlacement stylePlacement) { if (_options.Fullscreen || _options.KioskMode) { SetFullscreenScreen(hWnd, (int)stylePlacement.Styles, (int)stylePlacement.ExStyles); } else { // Center window if State is Normal if (_options.WindowState == WindowState.Normal && _options.StartCentered) { WindowHelper.CenterWindowToScreen(hWnd); } } WINDOWPLACEMENT wpPrev; var placement = GetWindowPlacement(hWnd, out wpPrev); if (placement == BOOL.TRUE) { _windoStylePlacement.WindowPlacement = wpPrev; } }
protected virtual WindowStylePlacement GetWindowStylePlacement(WindowState state) { WindowStylePlacement windowStyle = new WindowStylePlacement(_options); if (_options.UseCustomStyle && _options != null && _options.CustomStyle.IsValid()) { return(GetWindowStyles(_options.CustomStyle, state)); } var styles = WindowStylePlacement.NormalStyles; var exStyles = WindowStylePlacement.NormalExStyles; if (_options.DisableResizing) { styles = WS.OVERLAPPEDWINDOW & ~WS.THICKFRAME | WS.CLIPCHILDREN | WS.CLIPSIBLINGS; styles &= ~WS.MAXIMIZEBOX; } if (_options.DisableMinMaximizeControls) { styles &= ~WS.MINIMIZEBOX; styles &= ~WS.MAXIMIZEBOX; } if (_options.WindowFrameless) { styles = WS.POPUPWINDOW | WS.CLIPCHILDREN | WS.CLIPSIBLINGS; styles |= WS.SIZEBOX; } if (_options.KioskMode || _options.Fullscreen) { styles &= ~(WS.CAPTION); exStyles &= ~(WS_EX.DLGMODALFRAME | WS_EX.WINDOWEDGE | WS_EX.CLIENTEDGE | WS_EX.STATICEDGE); state = WindowState.Fullscreen; _options.DisableResizing = _options.KioskMode ? true : _options.DisableResizing; } windowStyle.Styles = styles; windowStyle.ExStyles = exStyles; windowStyle.RECT = GetWindowBounds(); switch (state) { case WindowState.Normal: windowStyle.ShowCommand = SW.SHOWNORMAL; break; case WindowState.Maximize: windowStyle.Styles |= WS.MAXIMIZE; windowStyle.ShowCommand = SW.SHOWMAXIMIZED; break; case WindowState.Fullscreen: windowStyle.ShowCommand = SW.SHOWMAXIMIZED; break; default: break; } return(windowStyle); }