/// <summary> /// Asynchronously wait for the Chromium widget window to be created for the given ChromiumWebBrowser, /// and when created hook into its Windows message loop. /// </summary> /// <param name="nativeHost">The native window.</param> /// <param name="browserHandle">The browser window to intercept Windows messages for.</param> public virtual void Setup(IChromelyNativeHost nativeHost, IntPtr browserHandle) { _nativeHost = nativeHost; _framelessOption = _config.WindowOptions?.FramelessOption ?? new FramelessOption(); _browserHandle = browserHandle; try { bool foundWidget = false; while (!foundWidget) { var childHandles = GetAllChildHandles(_browserHandle); if (childHandles != null && childHandles.Any()) { foundWidget = true; _dragWindowHandlers = childHandles .Concat(new[] { browserHandle }) .Select(h => new DragWindowHandler(h, _nativeHost, _framelessOption)) .ToArray(); } else { // Chrome hasn't yet set up its message-loop window. Thread.Sleep(10); } } } catch { } }
public DwmFramelessController(FramelessInfo framelessInfo, FramelessOption framelessOption, Action <SizeChangedEventArgs> onSizeChanged) { _windowHandle = framelessInfo.Handle; _framelessInfo = framelessInfo; _framelessOption = framelessOption; _dragWindowInfo = new DragWindowInfo(framelessInfo.Handle, _framelessOption); _onSizeChanged = onSizeChanged; }
public DragWindowHandler(IntPtr handle, IChromelyNativeHost nativeHost, FramelessOption framelessOption) { _handle = handle; _nativeHost = nativeHost; _framelessOption = framelessOption ?? new FramelessOption(); _originalWndProc = GetWindowLongPtr(_handle, (int)GWL.WNDPROC); _wndProc = WndProc; _wndProcPtr = Marshal.GetFunctionPointerForDelegate(_wndProc); SetWindowLongPtr(_handle, (int)GWL.WNDPROC, _wndProcPtr); }
public ForwardMesssageHandler(IntPtr handle, IChromelyNativeHost nativeHost, FramelessOption framelessOption, bool isHost) { _handle = handle; _nativeHost = nativeHost; _framelessOption = framelessOption ?? new FramelessOption(); _isHost = isHost; _originalWndProc = GetWindowLongPtr(_handle, (int)WindowLongFlags.GWL_WNDPROC); _wndProc = WndProc; var wndProcPtr = Marshal.GetFunctionPointerForDelegate(_wndProc); SetWindowLongPtr(_handle, (int)WindowLongFlags.GWL_WNDPROC, wndProcPtr); }
protected override void OnCreated(IntPtr hWnd) { base.OnCreated(hWnd); _options.WindowFrameless = true; _framelessInfo = new FramelessInfo(hWnd); _framelessOption = _options.FramelessOption; _dwmFramelessController = new DwmFramelessController(_framelessInfo, _framelessOption, HandleSizeChanged); _dwmFramelessController.HandleCompositionchanged(); _dwmFramelessController.HandleThemechanged(); }
public WindowOptions() { UseOnlyCefMessageLoop = false; DisableResizing = false; DisableMinMaximizeControls = false; WindowFrameless = false; StartCentered = true; KioskMode = false; WindowState = WindowState.Normal; Title = "My Chromely App"; RelativePathToIconFile = "chromely.ico"; Size = new WindowSize(1200, 900); Position = new WindowPosition(0, 0); FramelessOption = new FramelessOption(); }
protected override void OnCreated(IntPtr hWnd) { base.OnCreated(hWnd); if (_options.Fullscreen || _options.KioskMode) { throw new NotSupportedException("Fullscreen/Kiok mode is not supported in ChromelyFramelessApp. Please use ChromelyBasicApp instead."); } _options.WindowFrameless = true; _framelessInfo = new FramelessInfo(hWnd); _framelessOption = _options.FramelessOption; _dwmFramelessController = new DwmFramelessController(_framelessInfo, _framelessOption, HandleSizeChanged); _dwmFramelessController.HandleCompositionchanged(); _dwmFramelessController.HandleThemechanged(); }
public DragWindowInfo(IntPtr parentHandle, FramelessOption framelessOption) { MainWindowHandle = parentHandle; _framelessOption = framelessOption; }
public ChromelyWinFramelessHost() { _framelessInfo = new FramelessInfo(IntPtr.Zero); _framelessOption = new FramelessOption(); }