/// <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 { }
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 4
0
            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);
            }
Ejemplo n.º 5
0
        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();
        }
Ejemplo n.º 6
0
    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();
    }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
 public DragWindowInfo(IntPtr parentHandle, FramelessOption framelessOption)
 {
     MainWindowHandle = parentHandle;
     _framelessOption = framelessOption;
 }
Ejemplo n.º 9
0
 public ChromelyWinFramelessHost()
 {
     _framelessInfo   = new FramelessInfo(IntPtr.Zero);
     _framelessOption = new FramelessOption();
 }