Поделиться через


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

Помещает указатель на конкретный объект данных в буфер обмена. Это делает объект данных доступным для функции OleGetClipboard .

Синтаксис

HRESULT OleSetClipboard(
  [in] LPDATAOBJECT pDataObj
);

Параметры

[in] pDataObj

Указатель на интерфейс IDataObject для объекта данных, из которого можно получить данные, размещаемые в буфере обмена. Этот параметр может иметь значение NULL; В этом случае буфер обмена очищается.

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

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

Код возврата Описание
CLIPBRD_E_CANT_OPEN
Сбой функции OpenClipboard , используемой в OleSetClipboard .
CLIPBRD_E_CANT_EMPTY
Сбой функции EmptyClipboard , используемой в OleSetClipboard .
CLIPBRD_E_CANT_CLOSE
Сбой функции CloseClipboard , используемой в OleSetClipboard .
CLIPBRD_E_CANT_SET
Сбой функции SetClipboardData , используемой в OleSetClipboard .

Комментарии

Если вы пишете приложение, которое может выступать в качестве источника операции буфера обмена, необходимо сделать следующее:

  • Создайте объект данных (в котором находится интерфейс IDataObject ) для копируемых или вырезаемых в буфер обмена данных. Этот объект должен быть тем же объектом, который используется в операциях перетаскивания OLE.
  • Вызовите OleSetClipboard , чтобы поместить указатель IDataObject в буфер обмена, чтобы он был доступен для функции OleGetClipboard . OleSetClipboard также вызывает метод IUnknown::AddRef для объекта данных.
  • При желании отпустите объект данных после его размещения в буфере обмена, чтобы освободить счетчик IUnknown::AddRef в приложении.
  • Если пользователь вырезает данные (удаляет их из документа и помещает их в буфер обмена), удалите данные из документа.
Все форматы предлагаются в буфере обмена с отложенной отрисовкой (буфер обмена содержит только указатель на объект данных, если вызов OleFlushClipboard не отображает данные в буфере обмена). Форматы, необходимые для совместимости OLE 1, синтезируются из имеющихся форматов OLE 2, а также помещаются в буфер обмена.

Функция OleSetClipboard назначает владение буфером обмена внутреннему дескриптору окна OLE. Число ссылок объекта данных увеличивается на 1, чтобы включить отложенную отрисовку. Количество ссылок уменьшается вызовом функции OleFlushClipboard или последующим вызовом OleSetClipboard с указанием NULL в качестве значения параметра (который очищает буфер обмена).

Когда приложение открывает буфер обмена (прямо или косвенно путем вызова функции OpenClipboard ), буфер обмена не может использоваться любым другим приложением, пока он не будет закрыт. Если буфер обмена в настоящее время открыт другим приложением, OleSetClipboard завершается сбоем. Внутренний дескриптор окна OLE удовлетворяет WM_RENDERFORMAT сообщения, делегируя их реализации IDataObject в объекте данных, который находится в буфере обмена.

Если указать ЗНАЧЕНИЕ NULL в качестве значения параметра для OleSetClipboard , текущий буфер обмена очищается. Если содержимое буфера обмена является результатом предыдущего вызова OleSetClipboard и буфер обмена был освобожден, отпустится указатель IDataObject , переданный в предыдущий вызов. Владелец буфера обмена должен использовать это в качестве сигнала о том, что ранее предложенные данные больше не отображаются в буфере обмена.

Если после закрытия приложения необходимо оставить данные в буфере обмена, вызовите OleFlushClipboard , а не OleSetClipboard со значением параметра NULL .

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header ole2.h
Библиотека Ole32.lib
DLL Ole32.dll
Набор API ext-ms-win-com-ole32-l1-1-5 (представлено в Windows 10 версии 10.0.15063)

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

OleFlushClipboard

OleGetClipboard

OleIsCurrentClipboard