Winforms控制窃取WndProc WM_NCHITEST

我正在使用WndProc函数中的WM_NCHITEST事件在C#中构建一个表单。 它在页面上没有控件时效果很好,但当我向页面添加一个面板时,我的WndProc函数停止接收WM_NCHITEST事件。 知道我能做些什么来阻止这个吗?

更新 :我的窗口通常是无边框的,但是当我以边框模式运行它时,当光标鼠标hover在窗口框架上时,会调用WM_NCHITTEST事件,让我认为我拥有的表单大小控件(Chromium Embedded Web Browser)正在拦截消息。 任何方式从一个不正常的窗口夺回WndProc控制权?

 protected override void WndProc(ref Message m) { if (m.Msg == 0x0083) //WM_NCAlSIZE { if (borderless) { return; //Works even with a control on the page. } } if (m.Msg == 0x0084) //WM_NCHITEST { Debug.Print("If there is a control on the page I won't print :("); } base.WndProc(ref m); } 

运行Chromium Embedded Web Browser有两个复杂因素,它首先创建自己的窗口并将其作为子项附加到您的窗口,这意味着您需要拦截子窗口的WndProc。 其次CefSharp使用multi_threaded_message_loop=true运行,它实际上会激活一个新线程来处理浏览器的消息,这意味着你需要小心翼翼地从你的UI线程和它的来回来回。

解决方案涉及自由使用PInvoke,所以我已经为它做了一个要点。

观看专门用于CefSharp Chromium嵌入式Web浏览器的子窗口消息的方法