2009-02-19 102 views
2

我試圖派生類形式ElementHost的和overiding所述的CreateParams方法:如何使ElementHost透明,使其背後的窗體可見並可點擊?

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

我有這樣的感覺,ElementHost沉浸在黑暗的藝術中。例如,我注意到一個ElementHost不能很好地與它的父窗體的不透明度打在一起。希望有人能幫助你。 – 2009-02-19 08:34:05

+0

你正在編寫上面的代碼在哪個類中? – RSB 2015-02-24 08:43:48

回答

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控件一起使用。