...
using drawing = System.Drawing;
using IDataObject_Com = System.Runtime.InteropServices.ComTypes.IDataObject;
...
[ComVisible(true), ComImport, Guid("4657278B-411B-11D2-839A-00C04FD918D0"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDropTargetHelper {
void DragEnter([In] IntPtr hwndTarget, [In, MarshalAs(UnmanagedType.Interface)] IDataObject_Com dataObject, [In] ref drawing.Point pt, [In] DragDropEffects effect);
void DragLeave();
void DragOver([In] ref drawing.Point pt, [In] DragDropEffects effect);
void Drop([In, MarshalAs(UnmanagedType.Interface)] IDataObject_Com dataObject, [In] ref drawing.Point pt, [In] DragDropEffects effect);
void Show([In] bool show);
}
None.
Sample usage (in WPF):
IDropTargetHelper dropHelper = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("4657278A-411B-11D2-839A-00C04FD918D0"))) as IDropTargetHelper;
protected override void OnDragEnter(DragEventArgs e) {
...
var pointWpf = e.GetPosition(this);
var point = new drawing.Point(Convert.ToInt32(pointWpf.X), Convert.ToInt32(pointWpf.Y));
dropHelper.DragEnter(hWnd, e.Data as IDataObject_Com, ref point, e.Effects);
...
}
protected override void OnDragLeave(DragEventArgs e) {
...
dropHelper.DragLeave();
...
}
protected override void OnDragOver(DragEventArgs e) {
...
dropHelper.DragOver(ref point, e.Effects);
...
}
protected override void OnDrop(DragEventArgs e) {
...
var pointWpf = e.GetPosition(this);
var point = new drawing.Point(Convert.ToInt32(pointWpf.X), Convert.ToInt32(pointWpf.Y));
dropHelper.Drop(e.Data as IDataObject_Com, ref point, e.Effects);
...
}