代码之家  ›  专栏  ›  技术社区  ›  Ries

如何使ElementHost透明,使其后面的窗体可见并可单击?

  •  2
  • Ries  · 技术社区  · 17 年前

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

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

    1 回复  |  直到 17 年前
        1
  •  2
  •   Nir    17 年前

    尝试将其添加到派生类:

    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处理程序返回什么。

    推荐文章