예제 #1
0
        protected override void WndProc(ref Message m)
        {
            const int WM_ENTERMENULOOP = 0x0211;
            const int WM_EXITMENULOOP  = 0x0212;

            switch (m.Msg)
            {
            case WM_ENTERMENULOOP:
                if (m.WParam == IntPtr.Zero)
                {
                    CefApi.SetOSModalLoop(true);
                }
                break;

            case WM_EXITMENULOOP:
                if (m.WParam == IntPtr.Zero)
                {
                    CefApi.SetOSModalLoop(false);
                }
                break;
            }
            base.WndProc(ref m);
        }
예제 #2
0
        private unsafe IntPtr WndProc(IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            const int WM_ENTERMENULOOP = 0x0211;
            const int WM_EXITMENULOOP  = 0x0212;

            switch (message)
            {
            case 0x0002:     // WM_DESTROY
                _source.WndProcCallback = null;
                foreach (var tuple in GetViews(hwnd))
                {
                    tuple.Item1.Close();
                }
                lock (_HookedWindows)
                {
                    _HookedWindows.Remove(_source.Handle);
                    _source.Dispose();
                }
                break;

            case 0x0047:                              //WM_WINDOWPOSCHANGED
                WINDOWPOS *windowPos = (WINDOWPOS *)lParam;
                if ((windowPos->flags & 0x0002) != 0) // SWP_NOMOVE
                {
                    break;
                }
                foreach (var tuple in GetViews(hwnd))
                {
                    tuple.Item1.OnUpdateRootBounds();
                }
                break;

            case 0x0231:     // WM_ENTERSIZEMOVE
                foreach (var tuple in GetViews(hwnd))
                {
                    tuple.Item1.OnRootResizeBegin(EventArgs.Empty);
                }
                break;

            case 0x0232:     // WM_EXITSIZEMOVE
                foreach (var tuple in GetViews(hwnd))
                {
                    tuple.Item1.OnRootResizeEnd(EventArgs.Empty);
                }
                break;

            case 0x0112:     // WM_SYSCOMMAND
                const int SC_KEYMENU = 0xF100;
                // Menu loop must not be runned with Alt key
                if ((int)(wParam.ToInt64() & 0xFFF0) == SC_KEYMENU && lParam == IntPtr.Zero)
                {
                    handled = true;
                }
                break;

            case WM_ENTERMENULOOP:
                if (wParam == IntPtr.Zero)
                {
                    CefApi.SetOSModalLoop(true);
                }
                break;

            case WM_EXITMENULOOP:
                if (wParam == IntPtr.Zero)
                {
                    CefApi.SetOSModalLoop(false);
                }
                break;
            }
            return(IntPtr.Zero);
        }