DranDrop в HtmlEditor'e
От: ALexVC Зимбабве  
Дата: 08.10.04 03:21
Оценка:
Здравствуйте,

Есть проект основанный на 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 сообщения нормально приходят — но
перемещаемый элемент (текст, таблица и т.д.) — пропадают.

Может я что-то не правильно делаю или чего не хватает — подскажите пожалуйста.

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.