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


Класс COleDataSource

Играет роль кэша, в который приложение помещает данные, которые оно будет предлагать во время операций передачи данных, таких как операции с буфером обмена или операции перетаскивания.

Синтаксис

class COleDataSource : public CCmdTarget

Участники

Открытые конструкторы

Имя Описание
COleDataSource::COleDataSource Формирует объект COleDataSource.

Открытые методы

Имя Описание
COleDataSource::CacheData Предоставляет данные в указанном формате с помощью STGMEDIUM структуры.
COleDataSource::CacheGlobalData Предоставляет данные в указанном формате с помощью HGLOBAL.
COleDataSource::D elayRenderData Предоставляет данные в указанном формате с помощью отложенной отрисовки.
COleDataSource::D elayRenderFileData Предлагает данные в указанном формате в указателе CFile .
COleDataSource::D elaySetData Вызывается для каждого формата, поддерживаемого в OnSetData.
COleDataSource::D oDragDrop Выполняет операции перетаскивания с источником данных.
COleDataSource::Empty Очищает COleDataSource объект данных.
COleDataSource::FlushClipboard Отрисовывает все данные в буфер обмена.
COleDataSource::GetClipboardOwner Проверяет, что данные, помещенные в буфер обмена, все еще есть.
COleDataSource::OnRenderData Извлекает данные в рамках отложенной отрисовки.
COleDataSource::OnRenderFileData Извлекает данные в CFile рамках отложенной отрисовки.
COleDataSource::OnRenderGlobalData Извлекает данные в HGLOBAL в рамках отложенной отрисовки.
COleDataSource::OnSetData Вызывается для замены данных в объекте COleDataSource .
COleDataSource::SetClipboard COleDataSource Помещает объект в буфер обмена.

Замечания

Вы можете напрямую создавать источники данных OLE. Кроме того, классы COleClientItem и COleServerItem создают источники данных OLE в ответ на их CopyToClipboard функции и DoDragDrop члены. Краткое описание см. в разделе COleServerItem::CopyToClipboard . Переопределите OnGetClipboardData функцию-член клиентского элемента или класса элементов сервера, чтобы добавить дополнительные форматы буфера обмена в данные в источнике данных OLE, созданном CopyToClipboard для функции-члена.DoDragDrop

Каждый раз, когда вы хотите подготовить данные для передачи, необходимо создать объект этого класса и заполнить его данными с помощью наиболее подходящего метода для данных. Способ вставки в источник данных напрямую зависит от того, предоставляются ли данные немедленно (немедленная отрисовка) или по запросу (отложенная отрисовка). Для каждого формата буфера обмена, в котором вы предоставляете данные путем передачи используемого формата буфера обмена (и необязательной структуры FORMATETC ), вызовите DelayRenderData.

Дополнительные сведения о источниках данных и передаче данных см. в статье "Объекты данных и источники данных" (OLE). Кроме того, разделы буфера обмена статьи описывают механизм OLE Clipboard.

Иерархия наследования

CObject

CCmdTarget

COleDataSource

Requirements

Заголовок: afxole.h

COleDataSource::CacheData

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

void CacheData(
    CLIPFORMAT cfFormat,
    LPSTGMEDIUM lpStgMedium,
    LPFORMATETC lpFormatEtc = NULL);

Параметры

cfFormat
Формат буфера обмена, в котором будут предложены данные. Этот параметр может быть одним из стандартных форматов буфера обмена или значением, возвращаемым собственной функцией Windows RegisterClipboardFormat .

lpStgMedium
Указывает на структуру STGMEDIUM , содержащую данные в указанном формате.

lpFormatEtc
Указывает на структуру FORMATETC , описывающую формат, в котором будут предлагаться данные. Укажите значение этого параметра, если требуется указать дополнительные сведения о формате буфера обмена, заданном cfFormat. Если значение РАВНО NULL, значения по умолчанию используются для других полей в FORMATETC структуре.

Замечания

Необходимо предоставить данные, так как эта функция предоставляет ее с помощью немедленной отрисовки. Данные кэшируются до тех пор, пока не потребуется.

Укажите данные с помощью структуры STGMEDIUM . Вы также можете использовать функцию-член, CacheGlobalData если объем передаваемых данных достаточно мал, чтобы эффективно передаваться с помощью HGLOBAL.

После вызова CacheDataptd элемента lpFormatEtc и содержимого lpStgMedium принадлежит объекту данных, а не вызывающей.

Чтобы использовать отложенную отрисовку, вызовите функцию-член DelayRenderData или DelayRenderFileData . Дополнительные сведения об отложенной отрисовке, обрабатываемой MFC, см. в статье "Объекты данных и источники данных: манипуляция".

Дополнительные сведения см. в структурах STGMEDIUM и FORMATETC в пакете SDK для Windows.

Дополнительные сведения см. в разделе RegisterClipboardFormat в пакете SDK для Windows.

COleDataSource::CacheGlobalData

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

void CacheGlobalData(
    CLIPFORMAT cfFormat,
    HGLOBAL hGlobal,
    LPFORMATETC lpFormatEtc = NULL);

Параметры

cfFormat
Формат буфера обмена, в котором будут предложены данные. Этот параметр может быть одним из стандартных форматов буфера обмена или значением, возвращаемым собственной функцией Windows RegisterClipboardFormat .

Hglobal
Обработайте глобальный блок памяти, содержащий данные в указанном формате.

lpFormatEtc
Указывает на структуру FORMATETC , описывающую формат, в котором будут предлагаться данные. Укажите значение этого параметра, если требуется указать дополнительные сведения о формате буфера обмена, заданном cfFormat. Если значение РАВНО NULL, значения по умолчанию используются для других полей в FORMATETC структуре.

Замечания

Эта функция предоставляет данные с помощью немедленной отрисовки, поэтому при вызове функции необходимо предоставить данные; Данные кэшируются до тех пор, пока не потребуется. Используйте функцию-член, CacheData если вы предоставляете большой объем данных или требуется структурированный носитель хранилища.

Чтобы использовать отложенную отрисовку, вызовите функцию-член DelayRenderData или DelayRenderFileData . Дополнительные сведения об отложенной отрисовке, обрабатываемой MFC, см. в статье "Объекты данных и источники данных: манипуляция".

Дополнительные сведения см . в структуре FORMATETC в пакете SDK для Windows.

Дополнительные сведения см. в разделе RegisterClipboardFormat в пакете SDK для Windows.

COleDataSource::COleDataSource

Формирует объект COleDataSource.

COleDataSource();

COleDataSource::D elayRenderData

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

void DelayRenderData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

Параметры

cfFormat
Формат буфера обмена, в котором будут предложены данные. Этот параметр может быть одним из стандартных форматов буфера обмена или значением, возвращаемым собственной функцией Windows RegisterClipboardFormat .

lpFormatEtc
Указывает на структуру FORMATETC , описывающую формат, в котором будут предлагаться данные. Укажите значение этого параметра, если требуется указать дополнительные сведения о формате буфера обмена, заданном cfFormat. Если значение РАВНО NULL, значения по умолчанию используются для других полей в FORMATETC структуре.

Замечания

Эта функция предоставляет данные с помощью отложенной отрисовки, поэтому данные не предоставляются немедленно. Функция-член OnRenderData или OnRenderGlobalData вызывается для запроса данных.

Используйте эту функцию, если вы не собираетесь предоставлять данные через CFile объект. Если вы собираетесь предоставить данные через CFile объект, вызовите функцию-член DelayRenderFileData . Дополнительные сведения об отложенной отрисовке, обрабатываемой MFC, см. в статье "Объекты данных и источники данных: манипуляция".

Чтобы использовать немедленную отрисовку, вызовите функцию-член CacheData или CacheGlobalData .

Дополнительные сведения см . в структуре FORMATETC в пакете SDK для Windows.

Дополнительные сведения см. в разделе RegisterClipboardFormat в пакете SDK для Windows.

COleDataSource::D elayRenderFileData

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

void DelayRenderFileData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

Параметры

cfFormat
Формат буфера обмена, в котором будут предложены данные. Этот параметр может быть одним из стандартных форматов буфера обмена или значением, возвращаемым собственной функцией Windows RegisterClipboardFormat .

lpFormatEtc
Указывает на структуру FORMATETC , описывающую формат, в котором будут предлагаться данные. Укажите значение этого параметра, если требуется указать дополнительные сведения о формате буфера обмена, заданном cfFormat. Если значение РАВНО NULL, значения по умолчанию используются для других полей в FORMATETC структуре.

Замечания

Эта функция предоставляет данные с помощью отложенной отрисовки, поэтому данные не предоставляются немедленно. Функция-член OnRenderFileData вызывается для запроса данных.

Используйте эту функцию, если вы собираетесь использовать CFile объект для предоставления данных. Если вы не собираетесь использовать CFile объект, вызовите функцию-член DelayRenderData . Дополнительные сведения об отложенной отрисовке, обрабатываемой MFC, см. в статье "Объекты данных и источники данных: манипуляция".

Чтобы использовать немедленную отрисовку, вызовите функцию-член CacheData или CacheGlobalData .

Дополнительные сведения см . в структуре FORMATETC в пакете SDK для Windows.

Дополнительные сведения см. в разделе RegisterClipboardFormat в пакете SDK для Windows.

COleDataSource::D elaySetData

Вызовите эту функцию для поддержки изменения содержимого источника данных.

void DelaySetData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

Параметры

cfFormat
Формат буфера обмена, в котором помещаются данные. Этот параметр может быть одним из стандартных форматов буфера обмена или значением, возвращаемым собственной функцией Windows RegisterClipboardFormat .

lpFormatEtc
Указывает на структуру FORMATETC , описывающую формат, в котором должны быть заменены данные. Укажите значение этого параметра, если требуется указать дополнительные сведения о формате буфера обмена, заданном cfFormat. Если значение РАВНО NULL, значения по умолчанию используются для других полей в FORMATETC структуре.

Замечания

OnSetData будет вызываться платформой, когда это происходит. Это используется только в том случае, если платформа возвращает источник данных из COleServerItem::GetDataSource. Если DelaySetData функция не вызывается, функция OnSetData никогда не будет вызываться. DelaySetData должен вызываться для каждого поддерживаемого буфера обмена или FORMATETC формата.

Дополнительные сведения см . в структуре FORMATETC в пакете SDK для Windows.

Дополнительные сведения см. в разделе RegisterClipboardFormat в пакете SDK для Windows.

COleDataSource::D oDragDrop

DoDragDrop Вызовите функцию-член для выполнения операции перетаскивания для этого источника данных, как правило, в обработчике CWnd::OnLButtonDown.

DROPEFFECT DoDragDrop(
    DWORD dwEffects = DROPEFFECT_COPY|DROPEFFECT_MOVE|DROPEFFECT_LINK,
    LPCRECT lpRectStartDrag = NULL,
    COleDropSource* pDropSource = NULL);

Параметры

dwEffects
Операции перетаскивания, разрешенные в этом источнике данных. Может быть одним или несколькими из следующих вариантов:

  • DROPEFFECT_COPY можно выполнить операцию копирования.

  • DROPEFFECT_MOVE можно выполнить операцию перемещения.

  • DROPEFFECT_LINK можно установить ссылку из удаленных данных на исходные данные.

  • DROPEFFECT_SCROLL Указывает, что может произойти операция прокрутки перетаскивания.

lpRectStartDrag
Указатель на прямоугольник, определяющий, где на самом деле начинается перетаскивание. Дополнительные сведения см. в разделе "Примечания".

pDropSource
Указывает на источник удаления. Если значение NULL, будет использоваться реализация COleDropSource по умолчанию.

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

Эффект перетаскивания, созданный операцией перетаскивания; в противном случае DROPEFFECT_NONE, если операция никогда не начинается, так как пользователь выпустил кнопку мыши перед выходом из предоставленного прямоугольника.

Замечания

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

Время задержки указывается параметром раздела реестра. Вы можете изменить время задержки, вызвав CWinApp::WriteProfileString или CWinApp::WriteProfileInt. Если не указать время задержки, используется значение по умолчанию в 200 миллисекундах. Время задержки перетаскивания сохраняется следующим образом:

  • Время задержки перетаскивания Windows NT хранится в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\NT\CurrentVersion\IniFileMapping\win.ini\Windows\DragDelay.

  • Время задержки перетаскивания Windows 3.x хранится в WIN. INI-файл в разделе [Windows}

  • Время задержки перетаскивания Windows 95/98 хранится в кэшированной версии WIN. INI.

Дополнительные сведения о том, как сведения о задержке перетаскивания хранятся в реестре или в реестре. INI-файл см. в статье WriteProfileString в пакете SDK для Windows.

Дополнительные сведения см. в статье о перетаскивании OLE.

COleDataSource::Empty

Вызовите эту функцию, чтобы очистить COleDataSource объект данных.

void Empty();

Замечания

Кэшированные и отложенные форматы отрисовки очищаются, чтобы их можно было повторно использовать.

Дополнительные сведения см. в разделе ReleaseStgMedium в пакете SDK для Windows.

COleDataSource::FlushClipboard

Отрисовывает данные, которые находится в буфере обмена, а затем позволяет вставлять данные из буфера обмена после завершения работы приложения.

static void PASCAL FlushClipboard();

Замечания

Используйте SetClipboard , чтобы поместить данные в буфер обмена.

COleDataSource::GetClipboardOwner

Определяет, изменились ли данные в буфере обмена после последнего вызова SetClipboard и, если да, идентифицирует текущего владельца.

static COleDataSource* PASCAL GetClipboardOwner();

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

Источник данных в настоящее время в буфере обмена или NULL, если нет ничего в буфере обмена или если буфер обмена не принадлежит вызывающей приложению.

COleDataSource::OnRenderData

Вызывается платформой для получения данных в указанном формате.

virtual BOOL OnRenderData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium);

Параметры

lpFormatEtc
Указывает на структуру FORMATETC , указывающую формат, в котором запрашивается информация.

lpStgMedium
Указывает на структуру STGMEDIUM , в которой возвращаются данные.

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

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Указанный формат является одним из ранее помещенных в COleDataSource объект с помощью функции-члена DelayRenderData или DelayRenderFileData для отрисовки с задержкой. Реализация этой функции по умолчанию вызывает OnRenderFileData или OnRenderGlobalData , если предоставленный носитель хранилища является файлом или памятью соответственно. Если ни из этих форматов не задано, то реализация по умолчанию возвращает значение 0 и ничего не делает. Дополнительные сведения об отложенной отрисовке, обрабатываемой MFC, см. в статье "Объекты данных и источники данных: манипуляция".

Если lpStgMedium-tymed> TYMED_NULL, STGMEDIUM необходимо выделить и заполнить, как указано в lpFormatEtc-tymed.> Если оно не TYMED_NULL, STGMEDIUM то оно должно быть заполнено данными.

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

Дополнительные сведения см. в структурах STGMEDIUM и FORMATETC, тип перечисления TYMED и IDataObject::GetData в пакете SDK для Windows.

COleDataSource::OnRenderFileData

Вызывается платформой для получения данных в указанном формате, когда указанный носитель хранилища является файлом.

virtual BOOL OnRenderFileData(
    LPFORMATETC lpFormatEtc,
    CFile* pFile);

Параметры

lpFormatEtc
Указывает на структуру FORMATETC , указывающую формат, в котором запрашивается информация.

pFile
Указывает на объект CFile , в котором данные должны быть отрисованы.

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

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Указанный формат ранее помещается в COleDataSource объект с помощью функции-члена DelayRenderData для отложенной отрисовки. Реализация этой функции по умолчанию просто возвращает значение FALSE.

Это расширенная переопределение. Переопределите эту функцию, чтобы предоставить данные в запрошенном формате и в среднем. В зависимости от данных вместо этого может потребоваться переопределить одну из других версий этой функции. Если требуется обрабатывать несколько носителей хранилища, переопределите OnRenderData. Если данные находится в файле или имеет размер переменной, переопределите OnRenderFileData. Дополнительные сведения об отложенной отрисовке, обрабатываемой MFC, см. в статье "Объекты данных и источники данных: манипуляция".

Дополнительные сведения см. в структуре FORMATETC и IDataObject::GetData в пакете SDK для Windows.

COleDataSource::OnRenderGlobalData

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

virtual BOOL OnRenderGlobalData(
    LPFORMATETC lpFormatEtc,
    HGLOBAL* phGlobal);

Параметры

lpFormatEtc
Указывает на структуру FORMATETC , указывающую формат, в котором запрашивается информация.

phGlobal
Указывает на дескриптор глобальной памяти, в которой возвращаются данные. Если этот параметр еще не выделен, этот параметр может иметь значение NULL.

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

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Указанный формат ранее помещается в COleDataSource объект с помощью функции-члена DelayRenderData для отложенной отрисовки. Реализация этой функции по умолчанию просто возвращает значение FALSE.

Если phGlobal имеет значение NULL, то новый HGLOBAL должен быть выделен и возвращен в phGlobal. В противном случае HGLOBAL, указанный phGlobal , должен быть заполнен данными. Объем данных, помещенных в HGLOBAL, не должен превышать текущий размер блока памяти. Кроме того, блок нельзя перераспределить на более крупный размер.

Это расширенная переопределение. Переопределите эту функцию, чтобы предоставить данные в запрошенном формате и в среднем. В зависимости от данных вместо этого может потребоваться переопределить одну из других версий этой функции. Если требуется обрабатывать несколько носителей хранилища, переопределите OnRenderData. Если данные находится в файле или имеет размер переменной, переопределите OnRenderFileData. Дополнительные сведения об отложенной отрисовке, обрабатываемой MFC, см. в статье "Объекты данных и источники данных: манипуляция".

Дополнительные сведения см. в структуре FORMATETC и IDataObject::GetData в пакете SDK для Windows.

COleDataSource::OnSetData

Вызывается платформой для задания или замены данных в COleDataSource объекте в указанном формате.

virtual BOOL OnSetData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium,
    BOOL bRelease);

Параметры

lpFormatEtc
Указывает на структуру FORMATETC , указывающую формат, в котором заменяются данные.

lpStgMedium
Указывает на структуру STGMEDIUM , содержащую данные, которые заменят текущее содержимое COleDataSource объекта.

bRelease
Указывает, кто имеет право собственности на носитель хранилища после завершения вызова функции. Вызывающий объект решает, кто отвечает за освобождение ресурсов, выделенных от имени носителя хранилища. Вызывающий объект делает это, задав bRelease. Если bRelease не является ненулевой, источник данных берет на себя владение, освобождая носитель после завершения его использования. Если значение bRelease равно 0, вызывающий сохраняет владение и источник данных может использовать носитель хранилища только в течение длительности вызова.

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

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Источник данных не владеет данными до тех пор, пока он не будет успешно получен. То есть, он не берет на себя владение, если OnSetData возвращается 0. Если источник данных получает владение, он освобождает носитель хранилища путем вызова функции ReleaseStgMedium .

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

Дополнительные сведения см. в структурах STGMEDIUM и FORMATETC, а также функциях ReleaseStgMedium и IDataObject::GetData в пакете SDK для Windows.

COleDataSource::SetClipboard

Помещает данные, содержащиеся в объекте COleDataSource в буфер обмена после вызова одной из следующих функций: CacheData, CacheGlobalData, DelayRenderData или DelayRenderFileData.

void SetClipboard();

См. также

Пример HIERSVR MFC
Пример OCLIENT MFC
Класс CCmdTarget
Диаграмма иерархии
Класс COleDataObject