using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Interop;
namespace PDF_Office.Helper
{
///
/// 显示拖拽时图片的辅助类
///
public static class DragDropHelper
{
private static IDropTargetHelper helper;
///
/// 拖拽相关操作的实例
///
public static IDropTargetHelper Helper
{
get
{
if (helper == null)
{
helper = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("4657278A-411B-11D2-839A-00C04FD918D0"))) as IDropTargetHelper;
}
return helper;
}
set { helper = value; }
}
public static void DragEnter(FrameworkElement element, DragEventArgs e)
{
try
{
Point iconPoint = e.GetPosition(element);
Helper?.DragEnter(new WindowInteropHelper(Window.GetWindow(element)).Handle, (System.Runtime.InteropServices.ComTypes.IDataObject)e.Data, ref iconPoint, e.Effects);
}
catch { }
}
public static void DragOver(FrameworkElement element, DragEventArgs e)
{
try
{
Point iconPoint = e.GetPosition(element);
Helper?.DragOver(ref iconPoint, e.Effects);
}
catch { }
}
public static void DragLeave()
{
try
{
Helper?.DragLeave();
}
catch { }
}
public static void Drop(FrameworkElement element, DragEventArgs e)
{
try
{
Point iconPoint = e.GetPosition(element);
Helper?.Drop((System.Runtime.InteropServices.ComTypes.IDataObject)e.Data, ref iconPoint, e.Effects);
}
catch { }
}
}
///
/// 系统设置拖拽时图片的接口
///
[ComImport]
[GuidAttribute("4657278B-411B-11d2-839A-00C04FD918D0")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDropTargetHelper
{
// Notifies the drag-image manager that the drop target's IDropTarget::DragEnter method has been called
[PreserveSig]
Int32 DragEnter(IntPtr hwndTarget, System.Runtime.InteropServices.ComTypes.IDataObject pDataObject, ref Point ppt, DragDropEffects dwEffect);
// Notifies the drag-image manager that the drop target's IDropTarget::DragLeave method has been called
[PreserveSig]
Int32 DragLeave();
// Notifies the drag-image manager that the drop target's IDropTarget::DragOver method has been called
[PreserveSig]
Int32 DragOver(ref Point ppt, DragDropEffects dwEffect);
// Notifies the drag-image manager that the drop target's IDropTarget::Drop method has been called
[PreserveSig]
Int32 Drop(System.Runtime.InteropServices.ComTypes.IDataObject pDataObject, ref Point ppt, DragDropEffects dwEffect);
// Notifies the drag-image manager to show or hide the drag image
[PreserveSig]
Int32 Show(bool fShow);
}
}