2

我试图派生一个类形式 ElementHost 并覆盖 CreateParams 方法:

    protected override CreateParams CreateParams
    {
        get
        {
            const int WS_EX_TRANSPARENT = 0x20;
            CreateParams cp = base.CreateParams;
            cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
            return cp;
        }
    }

这使其透明,但表单不可点击。

4

1 回答 1

2

尝试将此添加到您的派生类中:

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 控件。

于 2009-02-19T12:49:30.867 回答