2017-10-08 3 views
0

J'utilise un Webview (en fait Geckofx) dans une application Windows Forms et j'aimerais disposer d'un Layout Glisser-Déplacer transparent au-dessus de la Webview - aussi, si possible, il doit passer des événements de souris à la Webview. Est-ce possible?Winforms C#: Transparent Drag and Drop Overlay

+0

Que voulez-vous dire par un glisser-déposer la mise en page? – mjwills

+0

juste une vue transparente (panneau) avec le seul but de détecter les événements glisser-déposer –

Répondre

1

Ma solution est un panneau transparent qui passe aussi tous les événements à la forme mère sous-jacente

public class TransparentPanel : Panel 
{ 
    Timer Wriggler = new Timer(); 

    public TransparentPanel() 
    { 
     Wriggler.Tick += new EventHandler(TickHandler); 
     this.Wriggler.Interval = 500; 
     this.Wriggler.Enabled = true; 
    } 

    protected void TickHandler(object sender, EventArgs e) 
    { 
     this.InvalidateEx(); 
    } 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      CreateParams cp = base.CreateParams; 

      cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT 

      return cp; 
     } 
    } 

    protected void InvalidateEx() 
    { 
     if (Parent == null) 
     { 
      return; 
     } 

     Rectangle rc = new Rectangle(this.Location, this.Size); 

     Parent.Invalidate(rc, true); 
    } 

    protected override void WndProc(ref Message m) 
    { 
     const int WM_NCHITTEST = 0x0084; 
     const int HTTRANSPARENT = (-1); 

     if (m.Msg == WM_NCHITTEST) 
     { 
      m.Result = (IntPtr)HTTRANSPARENT; 
     } 
     else 
     { 
      base.WndProc(ref m); 
     } 
    } 

    protected override void OnPaintBackground(PaintEventArgs pevent) 
    { 
     // Do not allow the background to be painted 
    } 
}