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 に答える