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); }
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); }