private bool TreeControl_MessageCaptured(ref Message msg)
        {
            switch (msg.Msg)
            {
            case (int)WindowsAPI.WndMsg.WM_USER:
                fPreventSelChange = false;
                break;

            case (int)WindowsAPI.WndMsg.WM_MBUTTONUP:
                if (treeControl != null && TreeViewClicked != null)
                {
                    HandleClick(WindowsAPI.PointFromLPARAM(msg.LParam), Control.ModifierKeys, true);
                }
                break;

            case (int)WindowsAPI.WndMsg.WM_DESTROY:
                if (treeControl != null)
                {
                    Marshal.ReleaseComObject(treeControl);
                    treeControl = null;
                }
                break;
            }
            return(false);
        }
 /// <summary>
 /// Main constructor
 /// </summary>
 /// <param name="hwnd">Handle of the control parent</param>
 /// <param name="treeControl">The real Treeview object</param>
 public TreeViewWrapper(IntPtr hwnd, WindowsAPI.INameSpaceTreeControl2 treeControl)
 {
     this.treeControl = treeControl;
     treeController   = new NativeWindowController(hwnd);
     treeController.MessageCaptured += TreeControl_MessageCaptured;
     parentController = new NativeWindowController(WindowsAPI.GetParent(hwnd));
     parentController.MessageCaptured += ParentControl_MessageCaptured;
 }
 public void Dispose()
 {
     if (fDisposed)
     {
         return;
     }
     if (treeControl != null)
     {
         Marshal.ReleaseComObject(treeControl);
         treeControl = null;
     }
     fDisposed = true;
 }