Класс 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.
Иерархия наследования
COleDataSource
Требования
Заголовок: 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.
После вызова CacheData
ptd
элемента 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