private void ShellTreeView_DragOver(object sender, DragEventArgs e) {
var wp = new DataObject.Win32Point() { X = e.X, Y = e.Y };
ShellView.Drag_SetEffect(e);
var descinvalid = new DataObject.DropDescription();
descinvalid.type = (int)DataObject.DropImageType.Invalid;
((System.Runtime.InteropServices.ComTypes.IDataObject)e.Data).SetDropDescription(descinvalid);
var node = this.ShellTreeView.GetNodeAt(PointToClient(new Point(e.X, e.Y)));
if (node != null && !String.IsNullOrEmpty(node.Text) && node.Text != this._EmptyItemString) {
User32.SendMessage(this.ShellTreeView.Handle, MSG.TVM_SETHOT, 0, node.Handle);
var desc = new DataObject.DropDescription();
switch (e.Effect) {
case DragDropEffects.Copy:
desc.type = (int)DataObject.DropImageType.Copy;
desc.szMessage = "Copy To %1";
break;
case DragDropEffects.Link:
desc.type = (int)DataObject.DropImageType.Link;
desc.szMessage = "Create Link in %1";
break;
case DragDropEffects.Move:
desc.type = (int)DataObject.DropImageType.Move;
desc.szMessage = "Move To %1";
break;
case DragDropEffects.None:
desc.type = (int)DataObject.DropImageType.None;
desc.szMessage = "";
break;
default:
desc.type = (int)DataObject.DropImageType.Invalid;
desc.szMessage = "";
break;
}
desc.szInsert = node.Text;
((System.Runtime.InteropServices.ComTypes.IDataObject)e.Data).SetDropDescription(desc);
}
if (e.Data.GetDataPresent("DragImageBits"))
DropTargetHelper.DropTarget.Create.DragOver(ref wp, (int)e.Effect);
else
base.OnDragOver(e);
}