Перетаскивание OLE

Функция перетаскивания OLE в основном является ярлыком для копирования и вставки данных. При использовании буфера обмена для копирования или вставки данных необходимо выполнить ряд шагов. Вы выбираете данные и выберите "Вырезать" или "Копировать" в меню "Изменить". Затем перейдите в целевое приложение или окно и поместите курсор в целевое расположение. Наконец, выберите "Изменить>вставку " в меню.

Функция перетаскивания OLE отличается от механизма перетаскивания диспетчера файлов. Диспетчер файлов может обрабатывать только имена файлов и предназначен специально для передачи имен файлов приложениям. Перетаскивание в OLE гораздо более общий. Он позволяет перетаскивать все данные, которые также можно поместить в буфер обмена.

При использовании перетаскивания OLE удалите два шага из процесса. Вы выбираете данные из исходного окна (источник перетаскивания), а затем перетащите его в место назначения (целевой объект drop). Вы удалите его, отпустив кнопку мыши. Операция устраняет необходимость в меню и быстрее, чем последовательность копирования и вставки. Существует только одно требование: как источник, так и целевой объект удаления должны быть открыты, и по крайней мере частично видимым на экране.

С помощью перетаскивания OLE данные можно легко передавать из одного расположения в другое: в документе, между различными документами или между приложениями. Его можно реализовать в контейнере или серверном приложении. Любое приложение может быть источником удаления, целевым объектом удаления или обоими. Если приложение реализует поддержку drop-source и drop-target, можно перетаскивать между дочерними окнами или в одном окне. Эта функция упрощает использование приложения.

В статьях о объектах данных и источниках данных (OLE) объясняется, как реализовать передачу данных в приложениях. Также полезно изучить примеры OLE MFC OCLIENT и HIERSVR.

Реализация источника удаления

Чтобы получить приложение для предоставления данных операции перетаскивания, вы реализуете источник перетаскивания. Базовая реализация источника drop является относительно простой. Первым шагом является определение того, какие события начинают операцию перетаскивания. Рекомендуемые рекомендации по пользовательскому интерфейсу определяют начало операции перетаскивания, так как при возникновении события WM_LBUTTONDOWN на точке внутри некоторых выбранных данных. Примеры OLE MFC OCLIENT и HIERSVR следуют этим рекомендациям.

Если приложение является контейнером, и выбранные данные являются связанными или внедренным объектом типа COleClientItem, вызовите ее DoDragDrop функцию-член. В противном случае создайте COleDataSource объект, инициализируйте его с помощью выделения и вызовите функцию-член объекта DoDragDrop источника данных. Если приложение является сервером, используйте COleServerItem::DoDragDrop. Сведения о настройке стандартного поведения перетаскивания см. в разделе "Настройка перетаскивания".

Если DoDragDrop возвращается DROPEFFECT_MOVE, удалите исходные данные из исходного документа немедленно. Ни одно другое возвращаемое значение из DoDragDrop источника не влияет на источник удаления.

Дополнительные сведения см. в разделе "Объекты данных OLE" и источники данных: создание и уничтожениеобъектов данных OLE и источников данных: манипуляция.

Реализация целевого объекта удаления

Он занимает немного больше работы для реализации целевого объекта удаления, чем источник удаления, но он по-прежнему относительно простой.

Реализация целевого объекта удаления OLE

  1. Если он еще не существует, добавьте вызов AfxOleInit в функцию-член приложения InitInstance . Этот вызов требуется для инициализации библиотек OLE.

  2. Добавьте переменную-член в каждое представление в приложении, которое вы хотите быть целевым объектом удаления. Эта переменная-член должна быть типом COleDropTarget или классом, производным от него.

  3. Из функции класса представления, обрабатывающей сообщение WM_CREATE (обычно OnCreate), вызовите функцию-член новой переменной Register члена. Revoke будет вызываться автоматически при уничтожении представления.

  4. Переопределите следующие функции. Если требуется одно и то же поведение в приложении, переопределите эти функции в классе представления. Если вы хотите изменить поведение в изолированных случаях или включить удаление в неисчерпаемыхCView окнах, переопределите эти функции в COleDropTargetпроизводном классе.

    Переопределить Разрешить
    OnDragEnter Удаление операций, выполняемых в окне. Вызывается при первом вводе курсора в окно.
    OnDragLeave Особое поведение, когда операция перетаскивания покидает указанное окно.
    OnDragOver Удаление операций, выполняемых в окне. Вызывается при перетаскивании курсора по окну.
    OnDrop Обработка данных, которые удаляются в указанное окно.
    OnScrollBy Особое поведение при прокрутке в целевом окне.

См. раздел MAINVIEW. CPP-файл, который является частью примера OCLIENT OCLIENT MFC для примера работы этих функций.

Дополнительные сведения см. в разделе "Объекты данных OLE" и источники данных: создание и уничтожениеобъектов данных OLE и источников данных: манипуляция.

Настройка перетаскивания

Реализация функции перетаскивания по умолчанию достаточно для большинства приложений. Однако для некоторых приложений может потребоваться изменить это стандартное поведение. В этом разделе описываются действия, необходимые для изменения этих значений по умолчанию. Этот метод можно использовать для создания приложений, которые не поддерживают составные документы в источники.

Если вы настраиваете стандартное поведение перетаскивания OLE или у вас есть приложение, отличное от OLE, необходимо создать COleDataSource объект для хранения данных. Когда пользователь запускает операцию перетаскивания, код должен вызывать DoDragDrop функцию из этого объекта вместо других классов, поддерживающих операции перетаскивания.

При необходимости можно создать COleDropSource объект для управления удалением и переопределением некоторых его функций в зависимости от типа поведения, которое требуется изменить. Затем этот объект drop-source передается для COleDataSource::DoDragDrop изменения поведения этих функций по умолчанию. Эти различные варианты позволяют обеспечить большую гибкость в том, как вы поддерживаете операции перетаскивания в приложении. Дополнительные сведения о источниках данных см. в статье "Объекты данных и источники данных" (OLE).

Вы можете переопределить следующие функции для настройки операций перетаскивания:

Переопределить Настройка
OnBeginDrag Как операция перетаскивания начинается после вызова DoDragDrop.
GiveFeedback Визуальный отзыв, например внешний вид курсора, для различных результатов удаления.
QueryContinueDrag Завершение операции перетаскивания. Эта функция позволяет проверка состояния ключа модификатора во время операции перетаскивания.

См. также

OLE
Объекты и источники данных OLE
Объекты данных OLE и источники данных: создание и уничтожение
Объекты данных OLE и источники данных: манипуляция
COleClientItem::D oDragDrop
Класс COleDataSource
COleDataSource::D oDragDrop
Класс COleDropSource
Класс COleDropTarget
CView::OnDragLeave