Функция DoDragDrop (ole2.h)

Выполняет операцию перетаскивания OLE.

Примечание Перед вызовом этой функции необходимо вызвать OleInitialize .
 

Синтаксис

HRESULT DoDragDrop(
  [in]  LPDATAOBJECT pDataObj,
  [in]  LPDROPSOURCE pDropSource,
  [in]  DWORD        dwOKEffects,
  [out] LPDWORD      pdwEffect
);

Параметры

[in] pDataObj

Указатель на интерфейс IDataObject на объекте данных, который содержит перетаскиваемые данные.

[in] pDropSource

Указатель на реализацию интерфейса IDropSource , который используется для связи с источником во время операции перетаскивания.

[in] dwOKEffects

Эффекты, которые источник допускает в операции перетаскивания OLE. Наиболее важным является то, позволяет ли он двигаться. Параметры dwOKEffect и pdwEffect получают значения из перечисления DROPEFFECT . Список значений см. в разделе DROPEFFECT.

[out] pdwEffect

Указатель на значение, указывающее, как операция перетаскивания OLE повлияла на исходные данные. Параметр pdwEffect задается только в том случае, если операция не отменена.

Возвращаемое значение

Эта функция возвращает S_OK об успешном выполнении. Ниже перечислены другие возможные значения.

Код возврата Описание
DRAGDROP_S_DROP
Операция перетаскивания OLE прошла успешно.
DRAGDROP_S_CANCEL
Операция перетаскивания OLE была отменена.
E_UNSPEC
Произошла непредвиденная ошибка.

Комментарии

При разработке приложения, которое может выступать в качестве источника данных для операции перетаскивания OLE, необходимо вызвать DoDragDrop при обнаружении того, что пользователь начал операцию перетаскивания OLE.

Функция DoDragDrop входит в цикл, в котором вызывает различные методы в интерфейсах IDropSource и IDropTarget . (Для успешной операции перетаскивания приложение, выступающее в качестве источника данных, должно также реализовать IDropSource, а целевое приложение — IDropTarget.)

  1. Функция DoDragDrop определяет окно под текущим расположением курсора. Затем он проверяет, является ли это окно допустимым целевым объектом удаления.
  2. Если окно является допустимым целевым объектом удаления, DoDragDrop вызывает IDropTarget::D ragEnter. Этот метод предоставляет код эффекта, указывающий, что произойдет, если падение произошло на самом деле. Список допустимых эффектов удаления см. в перечислении DROPEFFECT .
  3. DoDragDrop вызывает IDropSource::GiveFeedback с кодом эффекта, чтобы интерфейс источника перетаскивания смог предоставить пользователю соответствующую визуальную обратную связь. Указатель pDropSource , передаваемый в DoDragDrop, указывает соответствующий интерфейс IDropSource .
  4. DoDragDrop отслеживает движения курсора мыши и изменения в состоянии клавиатуры или кнопки мыши.
    • Если пользователь выходит из окна, DoDragDrop вызывает IDropTarget::D ragLeave.
    • Если мышь входит в другое окно, DoDragDrop определяет, является ли это окно допустимым целевым объектом удаления, а затем вызывает IDropTarget::D ragEnter для этого окна.
    • Если мышь перемещается, но остается в том же окне, DoDragDrop вызывает IDropTarget::D ragOver.
  5. При изменении состояния клавиатуры или кнопки мыши DoDragDrop вызывает IDropSource::QueryContinueDrag и определяет, следует ли продолжить перетаскивание, удалить данные или отменить операцию на основе возвращаемого значения.
    • Если возвращаемое значение S_OK, DoDragDrop сначала вызывает IDropTarget::D ragOver , чтобы продолжить операцию. Этот метод возвращает новое значение эффекта, а DoDragDrop затем вызывает IDropSource::GiveFeedback с новым эффектом, чтобы можно было задать соответствующую визуальную обратную связь. Список допустимых эффектов удаления см. в перечислении DROPEFFECT . IDropTarget::D ragOver и IDropSource::GiveFeedback связаны, чтобы при перемещении мыши через целевой объект удаления пользователю предоставлялись самые актуальные отзывы о положении мыши.
    • Если возвращаемое значение DRAGDROP_S_DROP, DoDragDrop вызывает IDropTarget::D rop. Функция DoDragDrop возвращает код последнего эффекта источнику, чтобы исходное приложение смогла выполнить соответствующую операцию с исходными данными, например вырезать данные, если операция была перемещением.
    • Если возвращаемое значение DRAGDROP_S_CANCEL, функция DoDragDrop вызывает IDropTarget::D ragLeave.
DoDragDrop не поддерживает вызов поддержки перетаскивания при обработке сенсорного ввода или ввода с помощью пера.

Для поддержки сенсорного ввода или ввода с помощью пера не вызывайте DoDragDrop из обработчика сенсорного ввода. Вместо этого вызовите DoDragDrop из обработчика для тех сообщений мыши, которые система синтезирует при сенсорном вводе.

Приложение может идентифицировать синтезированные сообщения, вызвав функцию GetMessageExtraInfo . Дополнительные сведения об использовании GetMessageExtraInfo для различения ввода с помощью мыши и сенсорного ввода Windows см. в разделе Устранение неполадок с приложениями.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header ole2.h
Библиотека Ole32.lib
DLL Ole32.dll

См. также раздел

IDropSource