FORMATETC
- это тип буфера обмена приложения, из-за отсутствия лучшего термина. Чтобы выполнить некоторые визуальные приемы перетаскивания вокруг узла дерева, его необходимо скопировать в этот буфер обмена с описанием источника. Исходный элемент управления загружает свою информацию в буфер обмена FORMATETC
и отправляет ее целевому объекту. Похоже, ошибка возникает при перетаскивании, а не при перетаскивании. DV
в DV_E_FORMATETC
обычно указывает на ошибку, возникающую на этапе удаления.
Пункт назначения не выглядит так, как будто ему нравится то, что вы на него бросаете. Буфер обмена может быть поврежден или пункт назначения может быть не настроен для его понимания.
Я рекомендую вам попробовать одну из двух вещей.
- Удалить исходную древовидную структуру и пункт назначения. Дамп свои дллс. Закройте все Откройте и поместите вид дерева и место назначения обратно в форму. Возможно, он только что сформирован плохо и не полностью заполняет структуру
FORMATETC
.
- Попробуйте добавить другое дерево и перейти к нему. Если вы переходите на другое дерево, и оно работает, вы знаете, что ваши апельсины работают на апельсины, а это не дерево. Это может быть пункт назначения, если это сетка или список. Возможно, вам придется изменить эти структуры, чтобы иметь возможность получать падение.
Не то чтобы это помогло, но структура примерно такая:
typedef struct tagFORMATETC
{
CLIPFORMAT cfFormat;
DVTARGETDEVICE *ptd;
DWORD dwAspect;
LONG lindex;
DWORD tymed;
} FORMATETC, *LPFORMATETC;