我正在使用WM_NCHITEST
函数中的WndProc
事件在C#中构建表单。它在页面上没有任何控件时效果很好,但是当我向页面添加了一个面板时,我的WndProc
函数停止了接收WM_NCHITEST
个事件。知道我能做些什么来阻止这个吗?
UPDATE :我的窗口通常是无边框的,但是当我以边框模式运行时,当光标鼠标悬停在窗口框架上时会调用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);
}
答案 0 :(得分:1)
运行Chromium Embedded Web Browser有两个复杂问题,它首先创建自己的窗口,并将其作为子项附加到您的窗口,这意味着您需要拦截子窗口的WndProc。其次CefSharp以multi_threaded_message_loop=true
运行,它实际上会激活一个新的线程来处理浏览器的消息,这意味着你需要小心翼翼地从你的UI线程和它的来回来回。
解决方案涉及自由使用PInvoke,所以我已经为它做了一个要点。