コード例 #1
0
ファイル: NativeWindow.cs プロジェクト: zhh007/Chromely
        /// <summary>
        /// The window proc.
        /// </summary>
        /// <param name="hwnd">
        /// The hwnd.
        /// </param>
        /// <param name="umsg">
        /// The umsg.
        /// </param>
        /// <param name="wParam">
        /// The w param.
        /// </param>
        /// <param name="lParam">
        /// The l param.
        /// </param>
        /// <returns>
        /// The <see cref="IntPtr"/>.
        /// </returns>
        private IntPtr WindowProc(IntPtr hwnd, uint umsg, IntPtr wParam, IntPtr lParam)
        {
            var msg = (WM)umsg;

            switch (msg)
            {
            case WM.CREATE:
            {
                Handle = hwnd;
                var size = GetClientSize();
                OnCreate(hwnd, size.Width, size.Height);
                break;
            }

            case WM.ERASEBKGND:
                return(new IntPtr(1));

            case WM.SIZE:
            {
                var size = GetClientSize();
                OnSize(size.Width, size.Height);
                break;
            }

            case WM.CLOSE:
            {
                OnExit();
                Exit();
                break;
            }
            }

            return(User32Methods.DefWindowProc(hwnd, umsg, wParam, lParam));
        }
コード例 #2
0
        private static IntPtr WindowProc(IntPtr hwnd, uint umsg,
                                         IntPtr wParam, IntPtr lParam)
        {
            var msg = (WM)umsg;

            switch (msg)
            {
            case WM.ERASEBKGND:
                return(new IntPtr(1));

            case WM.CLOSE:
            {
                User32Methods.PostQuitMessage(0);
                break;
            }

            case WM.PAINT:
            {
                PaintStruct ps;
                var         hdc = User32Methods.BeginPaint(hwnd, out ps);
                User32Methods.FillRect(hdc, ref ps.PaintRect,
                                       Gdi32Helpers.GetStockObject(StockObject.WHITE_BRUSH));
                User32Methods.EndPaint(hwnd, ref ps);
                break;
            }
            }
            return(User32Methods.DefWindowProc(hwnd, umsg, wParam, lParam));
        }
コード例 #3
0
        /// <summary>
        /// The window proc.
        /// </summary>
        /// <param name="hwnd">
        /// The hwnd.
        /// </param>
        /// <param name="umsg">
        /// The umsg.
        /// </param>
        /// <param name="wParam">
        /// The w param.
        /// </param>
        /// <param name="lParam">
        /// The l param.
        /// </param>
        /// <returns>
        /// The <see cref="IntPtr"/>.
        /// </returns>
        private IntPtr WindowProc(IntPtr hwnd, uint umsg, IntPtr wParam, IntPtr lParam)
        {
            var msg = (WM)umsg;

            switch (msg)
            {
            case WM.ACTIVATE:
            {
                if (_hostConfig.HostPlacement.Frameless)
                {
                    var frameSizeY   = User32Methods.GetSystemMetrics(SystemMetrics.SM_CYFRAME);
                    var frameSizeX   = User32Methods.GetSystemMetrics(SystemMetrics.SM_CXFRAME);
                    var frameMargins = new Margins(frameSizeX, frameSizeX, frameSizeY, frameSizeY);
                    DwmApiMethods.DwmExtendFrameIntoClientArea(Handle, ref frameMargins);
                    User32Methods.SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, WindowPositionFlags.SWP_NOZORDER | WindowPositionFlags.SWP_NOOWNERZORDER | WindowPositionFlags.SWP_NOMOVE | WindowPositionFlags.SWP_NOSIZE | WindowPositionFlags.SWP_FRAMECHANGED);
                }
                break;
            }

            case WM.CREATE:
            {
                Handle = hwnd;
                var size = GetClientSize();
                OnCreate(hwnd, size.Width, size.Height);
                break;
            }

            case WM.ERASEBKGND:
                return(new IntPtr(1));

            case WM.SIZE:
            {
                var size = GetClientSize();
                OnSize(size.Width, size.Height);
                break;
            }

            case WM.CLOSE:
            {
                OnExit();
                Exit();
                Environment.Exit(0);
                break;
            }

            case WM.NCHITTEST:
                if (_hostConfig.HostPlacement.Frameless)
                {
                    return((IntPtr)NativeMethods.HT_CAPTION);
                }
                break;
            }

            return(User32Methods.DefWindowProc(hwnd, umsg, wParam, lParam));
        }
コード例 #4
0
ファイル: NativeWindow.cs プロジェクト: DaveCS1/Chromely
        /// <summary>
        /// The window proc.
        /// </summary>
        /// <param name="hwnd">
        /// The hwnd.
        /// </param>
        /// <param name="umsg">
        /// The umsg.
        /// </param>
        /// <param name="wParam">
        /// The w param.
        /// </param>
        /// <param name="lParam">
        /// The l param.
        /// </param>
        /// <returns>
        /// The <see cref="IntPtr"/>.
        /// </returns>
        private IntPtr WindowProc(IntPtr hwnd, uint umsg, IntPtr wParam, IntPtr lParam)
        {
            var msg = (WM)umsg;

            switch (msg)
            {
            case WM.ACTIVATE:
            {
                if (mHostConfig.HostFrameless)
                {
                    Margins frameMargins = new Margins(7, 7, 27, 7);
                    DwmApiMethods.DwmExtendFrameIntoClientArea(Handle, ref frameMargins);
                    User32Methods.SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, WindowPositionFlags.SWP_NOZORDER | WindowPositionFlags.SWP_NOOWNERZORDER | WindowPositionFlags.SWP_NOMOVE | WindowPositionFlags.SWP_NOSIZE | WindowPositionFlags.SWP_FRAMECHANGED);
                }
                break;
            }

            case WM.CREATE:
            {
                Handle = hwnd;
                var size = GetClientSize();
                OnCreate(hwnd, size.Width, size.Height);
                break;
            }

            case WM.ERASEBKGND:
                return(new IntPtr(1));

            case WM.SIZE:
            {
                var size = GetClientSize();
                OnSize(size.Width, size.Height);
                break;
            }

            case WM.CLOSE:
            {
                OnExit();
                Exit();
                Environment.Exit(0);
                break;
            }

            case WM.NCCALCSIZE:
            {
                if (mHostConfig.HostFrameless)
                {
                    return(IntPtr.Zero);
                }
                break;
            }

            case WM.NCHITTEST:
            {
                if (mHostConfig.HostFrameless)
                {
                    // This might be a bit redundant to perform and should find another way
                    // to pass the return value rather than performing a hit test again.
                    var lRet = HitTestNCA(hwnd, wParam, lParam);
                    return(lRet);
                }

                break;
            }
            }

            return(User32Methods.DefWindowProc(hwnd, umsg, wParam, lParam));
        }
コード例 #5
0
        /// <summary>
        /// The window proc.
        /// </summary>
        /// <param name="hwnd">
        /// The hwnd.
        /// </param>
        /// <param name="umsg">
        /// The umsg.
        /// </param>
        /// <param name="wParam">
        /// The w param.
        /// </param>
        /// <param name="lParam">
        /// The l param.
        /// </param>
        /// <returns>
        /// The <see cref="IntPtr"/>.
        /// </returns>
        private IntPtr WindowProc(IntPtr hwnd, uint umsg, IntPtr wParam, IntPtr lParam)
        {
            var msg = (WM)umsg;

            switch (msg)
            {
            case WM.HOTKEY:
            {
                if (wParam == (IntPtr)1)
                {
                    User32Methods.PostMessage(Handle, (uint)WM.CLOSE, IntPtr.Zero, IntPtr.Zero);
                    return(IntPtr.Zero);
                }
                break;
            }

            case WM.SYSKEYDOWN:
            {
                if (_hostConfig.HostPlacement.KioskMode && (wParam == (IntPtr)VirtualKey.F4))
                {
                    return(IntPtr.Zero);
                }
                break;
            }

            case WM.CREATE:
            {
                NativeInstance = this;
                Handle         = hwnd;
                var size = GetClientSize();
                OnCreate(hwnd, size.Width, size.Height);
                break;
            }

            case WM.ERASEBKGND:
                return(new IntPtr(1));

            case WM.NCCALCSIZE:
            {
                if (_hostConfig.HostPlacement.Frameless && _hostConfig.HostPlacement.FramelessOptions.IsResizable)
                {
                    var result = User32Methods.DefWindowProc(hwnd, umsg, wParam, lParam);
                    NativeMethods.NCCALCSIZE_PARAMS csp;
                    csp = (NativeMethods.NCCALCSIZE_PARAMS)Marshal.PtrToStructure(
                        lParam,
                        typeof(NativeMethods.NCCALCSIZE_PARAMS));
                    csp.rgrc[0].Top -= _hostConfig.HostPlacement.FramelessOptions.WhiteStripeHeight;         // # remove top whitestripe border!
                    Marshal.StructureToPtr(csp, lParam, false);
                    return(result);
                }
                break;
            }

            case WM.SIZE:
            {
                var size = GetClientSize();
                OnSize(size.Width, size.Height);
                break;
            }

            case WM.CLOSE:
            {
                OnExit();
                Exit();
                Environment.Exit(0);
                break;
            }
            }

            return(User32Methods.DefWindowProc(hwnd, umsg, wParam, lParam));
        }
コード例 #6
0
        private static IntPtr WindowProc(IntPtr hwnd, uint umsg, IntPtr wParam, IntPtr lParam)
        {
            IntPtr result = IntPtr.Zero;

            var msg = (WM)umsg;

            switch (msg)
            {
            case WM.ERASEBKGND:
                return(new IntPtr(1));

            case WM.CLOSE: User32Methods.PostQuitMessage(0);
                break;

            case WM.PAINT:
            {
                var hdc = User32Methods.BeginPaint(hwnd, out PaintStruct ps);
                User32Methods.FillRect(hdc, ref ps.PaintRect,
                                       Gdi32Helpers.GetStockObject(StockObject.WHITE_BRUSH));
                User32Methods.EndPaint(hwnd, ref ps);
                break;
            }

            case WM.KEYDOWN: InputManager.Instance.KeyPressed((VirtualKey)wParam.ToInt32(), lParam.ToInt32() & 0x40000000);
                break;

            case WM.KEYUP: InputManager.Instance.KeyReleased((VirtualKey)wParam.ToInt32());
                break;

            case WM.CHAR: InputManager.Instance.KeyTyped((char)wParam.ToInt32());
                break;

            case WM.MOUSEMOVE:
            {
                int x = unchecked ((short)(long)lParam);
                int y = unchecked ((short)((long)lParam >> 16));
                InputManager.Instance.MouseMoved(x, y);
                break;
            }

            case WM.LBUTTONDOWN:
            {
                int x = unchecked ((short)(long)lParam);
                int y = unchecked ((short)((long)lParam >> 16));
                InputManager.Instance.MousePressed(MouseButton.Left, x, y);
                break;
            }

            case WM.LBUTTONUP:
            {
                int x = unchecked ((short)(long)lParam);
                int y = unchecked ((short)((long)lParam >> 16));
                InputManager.Instance.MouseReleased(MouseButton.Left, x, y);
                break;
            }

            case WM.RBUTTONDOWN:
            {
                int x = unchecked ((short)(long)lParam);
                int y = unchecked ((short)((long)lParam >> 16));
                InputManager.Instance.MousePressed(MouseButton.Right, x, y);
                break;
            }

            case WM.RBUTTONUP:
            {
                int x = unchecked ((short)(long)lParam);
                int y = unchecked ((short)((long)lParam >> 16));
                InputManager.Instance.MouseReleased(MouseButton.Right, x, y);
                break;
            }

            default:
                result = User32Methods.DefWindowProc(hwnd, umsg, wParam, lParam);
                break;
            }
            return(result);
        }