Функция OleSetClipboard (ole2.h)
Помещает указатель на конкретный объект данных в буфер обмена. Это делает объект данных доступным для функции OleGetClipboard .
Синтаксис
HRESULT OleSetClipboard(
[in] LPDATAOBJECT pDataObj
);
Параметры
[in] pDataObj
Указатель на интерфейс IDataObject для объекта данных, из которого можно получить данные, размещаемые в буфере обмена. Этот параметр может иметь значение NULL; В этом случае буфер обмена очищается.
Возвращаемое значение
Эта функция возвращает S_OK об успешном выполнении. Ниже перечислены другие возможные значения.
Код возврата | Описание |
---|---|
|
Сбой функции OpenClipboard , используемой в OleSetClipboard . |
|
Сбой функции EmptyClipboard , используемой в OleSetClipboard . |
|
Сбой функции CloseClipboard , используемой в OleSetClipboard . |
|
Сбой функции SetClipboardData , используемой в OleSetClipboard . |
Комментарии
Если вы пишете приложение, которое может выступать в качестве источника операции буфера обмена, необходимо сделать следующее:
- Создайте объект данных (в котором находится интерфейс IDataObject ) для копируемых или вырезаемых в буфер обмена данных. Этот объект должен быть тем же объектом, который используется в операциях перетаскивания OLE.
- Вызовите OleSetClipboard , чтобы поместить указатель IDataObject в буфер обмена, чтобы он был доступен для функции OleGetClipboard . OleSetClipboard также вызывает метод IUnknown::AddRef для объекта данных.
- При желании отпустите объект данных после его размещения в буфере обмена, чтобы освободить счетчик IUnknown::AddRef в приложении.
- Если пользователь вырезает данные (удаляет их из документа и помещает их в буфер обмена), удалите данные из документа.
Функция 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) |