Здравствуйте,
Есть проект основанный на mshtml, надо в HtmlEditor добавить следующую фичу:
при перетаскивании таблиц нельзя чтобы они были вложенными (для этого надо проверять
при перетаскивании элементов куда они перетаскиваются).
Я стал разбираться с DragnDrop (т.к. другими способами у меня не получилось)
и нашел что для его отлавливаня необходимо добавить интерфейс IDropTarget и
в функции GetDropTarget поменить на свой (вот как я делал):
[ComImport(), GuidAttribute("0000010E-0000-0000-C000-000000000046"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
GuidAttribute("00000122-0000-0000-C000-000000000046")]
public interface IDropTarget
{
void DragEnter(IDataObject pDataObj, [In, MarshalAs(UnmanagedType.U4)] int grfKeyState,
[In, MarshalAs(UnmanagedType.U8)] long pt, [Out] out DROPEFFECTS pdwEffect);
void DragOver([In, MarshalAs(UnmanagedType.U4)] int grfKeyState,
[In, MarshalAs(UnmanagedType.U8)] long pt, [Out] out DROPEFFECTS pdwEffect);
void DragLeave();
void Drop(IDataObject pDataObj, [In, MarshalAs(UnmanagedType.U4)] int grfKeyState,
[In, MarshalAs(UnmanagedType.U8)] long pt, [Out] out DROPEFFECTS pdwEffect);
}
- реализовал его в классе DropTarget
public int GetDropTarget(IDropTarget pDropTarget, out IDropTarget ppDropTarget)
{
ppDropTarget = new DropTarget(); //заменяю
return HRESULT.S_OK;
}
Реализация DragEnter и т.д. предельно проста:
public void DragEnter(IDataObject pDataObj, int grfKeyState, long pt, out DROPEFFECTS pdwEffect)
{
Debug.WriteLine ("DragEnter");
pdwEffect = pdwEffect = DROPEFFECTS.DROPEFFECT_MOVE;
}
При перемещении каких-либо элементов в окне HtmlEditor сообщения нормально приходят — но
перемещаемый элемент (текст, таблица и т.д.) — пропадают.
Может я что-то не правильно делаю или чего не хватает — подскажите пожалуйста.
Заранее спасибо.