.net 如何使ElementHost透明,使其后面的窗体可见并可单击?
我试图从ElementHost派生一个类并覆盖CreateParams方法:.net 如何使ElementHost透明,使其后面的窗体可见并可单击?,.net,wpf,winforms,transparency,.net,Wpf,Winforms,Transparency,我试图从ElementHost派生一个类并覆盖CreateParams方法: protected override CreateParams CreateParams { get { const int WS_EX_TRANSPARENT = 0x20; CreateParams cp = base.CreateParams; cp.ExStyle = cp.ExStyle |
protected override CreateParams CreateParams
{
get
{
const int WS_EX_TRANSPARENT = 0x20;
CreateParams cp = base.CreateParams;
cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
return cp;
}
}
这使其透明,但表单不可单击。尝试将其添加到派生类中:
private const int WM_NCHITTEST = 0x0084;
private const int HTTRANSPARENT = (-1);
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCHITTEST)
{
m.Result = (IntPtr) HTTRANSPARENT;
}
else
{
base.WndProc(ref m);
}
}
这将使整个ElementHost对鼠标“透明”,如果希望WPF内容响应鼠标,则必须使用VisualTreeHelper.HitTest来决定从WM_NCHITTEST处理程序返回什么
我没有用ElementHost测试过它,但它可以与普通WinForms控件一起使用。我感觉ElementHost沉浸在黑暗艺术中。例如,我注意到ElementHost不能很好地处理其父窗体的不透明性。希望有人能帮你。你是在哪门课上写上述代码的?如果这个答案被接受,这是否意味着OP成功地让它工作了?我在自己的应用程序中也尝试过同样的方法,但是WPF控件直到悬停在上面才出现,并且下面的WinForms控件从未收到任何鼠标输入(尽管它们是可见的)。我认为这也不管用(至少没有进一步的解释)。