Sdílet prostřednictvím


COleDataSource – třída

Funguje jako mezipaměť, do které aplikace umístí data, která bude nabízet během operací přenosu dat, jako je schránka nebo operace přetažení.

Syntaxe

class COleDataSource : public CCmdTarget

Členové

Veřejné konstruktory

Název Popis
COleDataSource::COleDataSource COleDataSource Vytvoří objekt.

Veřejné metody

Název Popis
COleDataSource::CacheData Nabízí data v zadaném formátu pomocí STGMEDIUM struktury.
COleDataSource::CacheGlobalData Nabízí data v zadaném formátu pomocí HGLOBAL.
COleDataSource::D elayRenderData Nabízí data v zadaném formátu pomocí zpožděného vykreslování.
COleDataSource::D elayRenderFileData Nabízí data v zadaném formátu v ukazateli CFile .
COleDataSource::D elaySetData Volá se pro každý formát, který je podporován v OnSetData.
COleDataSource::D oDragDrop Provádí operace přetažení pomocí zdroje dat.
COleDataSource::Empty Vyprázdní COleDataSource objekt dat.
COleDataSource::FlushClipboard Vykreslí všechna data do schránky.
COleDataSource::GetClipboardOwner Ověřuje, že data umístěná ve schránce jsou stále k dispozici.
COleDataSource::OnRenderData Načte data jako součást zpožděného vykreslování.
COleDataSource::OnRenderFileData Načte data v CFile rámci zpožděného vykreslování.
COleDataSource::OnRenderGlobalData Načte data do HGLOBAL jako součást zpožděného vykreslování.
COleDataSource::OnSetData Volána k nahrazení dat v objektu COleDataSource .
COleDataSource::SetClipboard COleDataSource Umístí objekt do schránky.

Poznámky

Zdroje dat OLE můžete vytvářet přímo. Alternativně třídy COleClientItem a COleServerItem vytvářejí zdroje dat OLE v reakci na jejich CopyToClipboard a DoDragDrop členské funkce. Stručný popis najdete v COleServerItem::CopyToClipboard. OnGetClipboardData Přepište členskou funkci položky klienta nebo třídy položky serveru a přidejte do dat ve zdroji dat OLE vytvořeném pro CopyToClipboard funkci nebo DoDragDrop člena další formáty schránky.

Kdykoli chcete připravit data na přenos, měli byste vytvořit objekt této třídy a vyplnit je daty pomocí nejvhodnější metody pro vaše data. Způsob vložení do zdroje dat je přímo ovlivněn tím, jestli se data zadává okamžitě (okamžité vykreslování) nebo na vyžádání (zpožděné vykreslování). Pro každý formát schránky, ve kterém poskytujete data předáním formátu schránky, který se má použít (a volitelná struktura FORMATETC ), volejte DelayRenderData.

Další informace o zdrojích dat a přenosu dat naleznete v článku Datové objekty a zdroje dat (OLE). Kromě toho článek Témata schránky popisuje mechanismus schránky OLE.

Hierarchie dědičnosti

Objekt CObject

CCmdTarget

COleDataSource

Požadavky

Hlavička: afxole.h

COleDataSource::CacheData

Voláním této funkce určíte formát, ve kterém se data nabízejí během operací přenosu dat.

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

Parametry

cfFormat
Formát schránky, ve kterém se mají data nabízet. Tento parametr může být jedním z předdefinovaných formátů schránky nebo hodnotou vrácenou nativní funkcí Windows RegisterClipboardFormat .

lpStgMedium
Odkazuje na strukturu STGMEDIUM obsahující data v zadaném formátu.

lpFormatEtc
Odkazuje na strukturu FORMATETC popisující formát, ve kterém mají být data nabízena. Zadejte hodnotu pro tento parametr, pokud chcete zadat další informace o formátu mimo formát schránky určený cfFormat. Pokud má hodnotu NULL, použijí se výchozí hodnoty pro ostatní pole ve struktuře FORMATETC .

Poznámky

Data musíte zadat, protože tato funkce je poskytuje pomocí okamžitého vykreslování. Data se ukládají do mezipaměti, dokud nebudou potřeba.

Zadejte data pomocí struktury STGMEDIUM . Členovou funkci můžete použít CacheGlobalData také v případě, že množství dat, která poskytujete, je dostatečně malé, aby bylo možné efektivně přenášet pomocí HGLOBAL.

Po volání CacheDataptd člena lpFormatEtc a obsahu lpStgMedium vlastní datový objekt, nikoli volající.

Pokud chcete použít zpožděné vykreslování, zavolejte funkci DelayRenderData nebo DelayRenderFileData . Další informace o zpožděném vykreslování, které zpracovává MFC, najdete v článku Datové objekty a zdroje dat: Manipulace.

Další informace naleznete v souborech STGMEDIUM a FORMATETC v sadě Windows SDK.

Další informace naleznete v tématu RegisterClipboardFormat v sadě Windows SDK.

COleDataSource::CacheGlobalData

Voláním této funkce určíte formát, ve kterém se data nabízejí během operací přenosu dat.

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

Parametry

cfFormat
Formát schránky, ve kterém se mají data nabízet. Tento parametr může být jedním z předdefinovaných formátů schránky nebo hodnotou vrácenou nativní funkcí Windows RegisterClipboardFormat .

hGlobal
Popisovač globálního bloku paměti obsahujícího data v zadaném formátu.

lpFormatEtc
Odkazuje na strukturu FORMATETC popisující formát, ve kterém mají být data nabízena. Zadejte hodnotu pro tento parametr, pokud chcete zadat další informace o formátu mimo formát schránky určený cfFormat. Pokud má hodnotu NULL, použijí se výchozí hodnoty pro ostatní pole ve struktuře FORMATETC .

Poznámky

Tato funkce poskytuje data pomocí okamžitého vykreslování, takže je nutné zadat data při volání funkce; data se ukládají do mezipaměti, dokud nebudou potřeba. Členovou CacheData funkci použijte, pokud poskytujete velké množství dat nebo pokud potřebujete strukturované úložné médium.

Pokud chcete použít zpožděné vykreslování, zavolejte funkci DelayRenderData nebo DelayRenderFileData . Další informace o zpožděném vykreslování, které zpracovává MFC, najdete v článku Datové objekty a zdroje dat: Manipulace.

Další informace naleznete ve struktuře FORMATETC v sadě Windows SDK.

Další informace naleznete v tématu RegisterClipboardFormat v sadě Windows SDK.

COleDataSource::COleDataSource

COleDataSource Vytvoří objekt.

COleDataSource();

COleDataSource::D elayRenderData

Voláním této funkce určíte formát, ve kterém se data nabízejí během operací přenosu dat.

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

Parametry

cfFormat
Formát schránky, ve kterém se mají data nabízet. Tento parametr může být jedním z předdefinovaných formátů schránky nebo hodnotou vrácenou nativní funkcí Windows RegisterClipboardFormat .

lpFormatEtc
Odkazuje na strukturu FORMATETC popisující formát, ve kterém mají být data nabízena. Zadejte hodnotu pro tento parametr, pokud chcete zadat další informace o formátu mimo formát schránky určený cfFormat. Pokud má hodnotu NULL, použijí se výchozí hodnoty pro ostatní pole ve struktuře FORMATETC .

Poznámky

Tato funkce poskytuje data pomocí zpožděného vykreslování, takže data nejsou zadána okamžitě. K vyžádání dat se volá členová funkce OnRenderData nebo OnRenderGlobalData .

Tuto funkci použijte, pokud nebudete data zadávat prostřednictvím objektu CFile . Pokud budete zadávat data prostřednictvím objektu CFile , zavolejte DelayRenderFileData členské funkce. Další informace o zpožděném vykreslování, které zpracovává MFC, najdete v článku Datové objekty a zdroje dat: Manipulace.

Chcete-li použít okamžité vykreslování, zavolejte funkci Člen CacheData nebo CacheGlobalData .

Další informace naleznete ve struktuře FORMATETC v sadě Windows SDK.

Další informace naleznete v tématu RegisterClipboardFormat v sadě Windows SDK.

COleDataSource::D elayRenderFileData

Voláním této funkce určíte formát, ve kterém se data nabízejí během operací přenosu dat.

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

Parametry

cfFormat
Formát schránky, ve kterém se mají data nabízet. Tento parametr může být jedním z předdefinovaných formátů schránky nebo hodnotou vrácenou nativní funkcí Windows RegisterClipboardFormat .

lpFormatEtc
Odkazuje na strukturu FORMATETC popisující formát, ve kterém mají být data nabízena. Zadejte hodnotu pro tento parametr, pokud chcete zadat další informace o formátu mimo formát schránky určený cfFormat. Pokud má hodnotu NULL, použijí se výchozí hodnoty pro ostatní pole ve struktuře FORMATETC .

Poznámky

Tato funkce poskytuje data pomocí zpožděného vykreslování, takže data nejsou zadána okamžitě. K vyžádání dat se volá členová funkce OnRenderFileData .

Tuto funkci použijte, pokud k zadání dat použijete CFile objekt. Pokud nebudete používat CFile objekt, zavolejte delayRenderData členské funkce. Další informace o zpožděném vykreslování, které zpracovává MFC, najdete v článku Datové objekty a zdroje dat: Manipulace.

Chcete-li použít okamžité vykreslování, zavolejte funkci Člen CacheData nebo CacheGlobalData .

Další informace naleznete ve struktuře FORMATETC v sadě Windows SDK.

Další informace naleznete v tématu RegisterClipboardFormat v sadě Windows SDK.

COleDataSource::D elaySetData

Voláním této funkce můžete podporovat změnu obsahu zdroje dat.

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

Parametry

cfFormat
Formát schránky, ve kterém mají být data umístěna. Tento parametr může být jedním z předdefinovaných formátů schránky nebo hodnotou vrácenou nativní funkcí Windows RegisterClipboardFormat .

lpFormatEtc
Odkazuje na strukturu FORMATETC popisující formát, ve kterém mají být data nahrazena. Zadejte hodnotu pro tento parametr, pokud chcete zadat další informace o formátu mimo formát schránky určený cfFormat. Pokud má hodnotu NULL, použijí se výchozí hodnoty pro ostatní pole ve struktuře FORMATETC .

Poznámky

OnSetData bude volána architekturou, když k tomu dojde. Používá se pouze v případě, že architektura vrátí zdroj dat z COleServerItem::GetDataSource. Pokud DelaySetData není volána, vaše OnSetData funkce se nikdy nevolá. DelaySetData měla by být volána pro každou schránku nebo FORMATETC formát, který podporujete.

Další informace naleznete ve struktuře FORMATETC v sadě Windows SDK.

Další informace naleznete v tématu RegisterClipboardFormat v sadě Windows SDK.

COleDataSource::D oDragDrop

DoDragDrop Volání členské funkce k provedení operace přetažení pro tento zdroj dat, obvykle v CWnd::OnLButtonDown obslužné rutiny.

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

Parametry

DwEffects
Operace přetažení povolené u tohoto zdroje dat Může to být jedna nebo více z následujících možností:

  • DROPEFFECT_COPY lze provést operaci kopírování.

  • DROPEFFECT_MOVE operaci přesunutí je možné provést.

  • DROPEFFECT_LINK bylo možné vytvořit propojení z vyřazených dat s původními daty.

  • DROPEFFECT_SCROLL Označuje, že může dojít k operaci posouvání přetažením.

lpRectStartDrag
Ukazatel na obdélník, který definuje, kde se skutečně spouští přetažení. Další informace naleznete v následující části poznámky.

pDropSource
Odkazuje na zdroj přetažení. Pokud je hodnota NULL, použije se výchozí implementace COleDropSource .

Vrácená hodnota

Efekt přetažení vygenerovaný operací přetažení; jinak DROPEFFECT_NONE, pokud operace nikdy nezačíná, protože uživatel vydal tlačítko myši před opuštěním zadaného obdélníku.

Poznámky

Operace přetažení se nespustí okamžitě. Počká, dokud kurzor myši neopustí obdélník určený lpRectStartDrag nebo dokud nepřejde zadaný počet milisekund. Pokud lpRectStartDrag je NULL, velikost obdélníku je jeden pixel.

Doba zpoždění je určena nastavením klíče registru. Zpoždění můžete změnit voláním CWinApp::WriteProfileString nebo CWinApp::WriteProfileInt. Pokud nezadáte dobu zpoždění, použije se výchozí hodnota 200 milisekund. Doba zpoždění přetažení se ukládá takto:

  • systém Windows NT Doba zpoždění přetažení je uložena ve složce HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\NT\CurrentVersion\IniFileMapping\win.ini\Windows\DragDelay.

  • Čas zpoždění přetažení systému Windows 3.x je uložen v systému WIN. Soubor INI v části [Windows}.

  • Windows 95/98 Doba zpoždění přetažení je uložena v mezipaměti verze WIN. INI.

Další informace o tom, jak jsou informace o zpoždění přetažení uloženy v registru nebo v registru . Soubor INI viz WriteProfileString v sadě Windows SDK.

Další informace naleznete v článku OLE přetažení.

COleDataSource::Empty

Voláním této funkce vyprázdníte COleDataSource objekt dat.

void Empty();

Poznámky

Formáty vykreslování uložené v mezipaměti i zpoždění se vyprázdní, aby je bylo možné znovu použít.

Další informace naleznete v tématu ReleaseStgMedium v sadě Windows SDK.

COleDataSource::FlushClipboard

Vykreslí data, která jsou ve schránce, a potom umožňuje vložit data ze schránky po vypnutí aplikace.

static void PASCAL FlushClipboard();

Poznámky

K vložení dat do schránky použijte SetClipboard .

COleDataSource::GetClipboardOwner

Určuje, jestli se data ve schránce od posledního zavolání sady SetClipboard změnila, a pokud ano, identifikuje aktuálního vlastníka.

static COleDataSource* PASCAL GetClipboardOwner();

Vrácená hodnota

Zdroj dat aktuálně ve schránce nebo NULL, pokud není ve schránce nic nebo pokud schránka není vlastněna volající aplikací.

COleDataSource::OnRenderData

Volá se rozhraním pro načtení dat v zadaném formátu.

virtual BOOL OnRenderData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium);

Parametry

lpFormatEtc
Odkazuje na strukturu FORMATETC určující formát, ve kterém jsou požadovány informace.

lpStgMedium
Odkazuje na strukturu STGMEDIUM , ve které se mají vrátit data.

Vrácená hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Zadaný formát je dříve umístěn v COleDataSource objektu pomocí DelayRenderData nebo DelayRenderFileData členské funkce pro zpožděné vykreslování. Výchozí implementace této funkce bude volat OnRenderFileData nebo OnRenderGlobalData , pokud zadané médium úložiště je soubor nebo paměť, v uvedeném pořadí. Pokud není zadán žádný z těchto formátů, vrátí výchozí implementace hodnotu 0 a nic neudělá. Další informace o zpožděném vykreslování, které zpracovává MFC, najdete v článku Datové objekty a zdroje dat: Manipulace.

Pokud je lpStgMedium-tymed> TYMED_NULL, STGMEDIUM měla by být přidělena a vyplněna podle specifikace lpFormatEtc-tymed.> Pokud není TYMED_NULL, STGMEDIUM měla by být vyplněna daty.

Jedná se o pokročilý přepis. Přepište tuto funkci tak, aby byla data v požadovaném formátu a médiu. V závislosti na datech můžete místo toho chtít přepsat jednu z dalších verzí této funkce. Pokud jsou vaše data malá a pevná, přepište OnRenderGlobalData. Pokud jsou vaše data v souboru nebo mají proměnnou velikost, přepište OnRenderFileData.

Další informace naleznete v objektech STGMEDIUM a FORMATETC , typu výčtu TYMED a IDataObject::GetData v sadě Windows SDK.

COleDataSource::OnRenderFileData

Volá se rozhraním pro načtení dat v zadaném formátu, pokud je zadané médium úložiště soubor.

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

Parametry

lpFormatEtc
Odkazuje na strukturu FORMATETC určující formát, ve kterém jsou požadovány informace.

pFile
Odkazuje na objekt CFile , ve kterém se mají data vykreslit.

Vrácená hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Zadaný formát je dříve umístěný v objektu COleDataSourcepomocí členské funkce DelayRenderData pro zpožděné vykreslování. Výchozí implementace této funkce jednoduše vrátí hodnotu FALSE.

Jedná se o pokročilý přepis. Přepište tuto funkci tak, aby byla data v požadovaném formátu a médiu. V závislosti na datech můžete místo toho přepsat jednu z dalších verzí této funkce. Pokud chcete zpracovat více úložných médií, přepište OnRenderData. Pokud jsou vaše data v souboru nebo mají proměnnou velikost, přepište OnRenderFileData. Další informace o zpožděném vykreslování, které zpracovává MFC, najdete v článku Datové objekty a zdroje dat: Manipulace.

Další informace naleznete ve struktuře FORMATETC a IDataObject::GetData v sadě Windows SDK.

COleDataSource::OnRenderGlobalData

Volá se rozhraním pro načtení dat v zadaném formátu, pokud je zadané médium úložiště globální paměť.

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

Parametry

lpFormatEtc
Odkazuje na strukturu FORMATETC určující formát, ve kterém jsou požadovány informace.

PhGlobal
Odkazuje na popisovač na globální paměť, ve které se mají data vrátit. Pokud ještě nebyl přidělen, může mít tento parametr hodnotu NULL.

Vrácená hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Zadaný formát je dříve umístěný v objektu COleDataSourcepomocí členské funkce DelayRenderData pro zpožděné vykreslování. Výchozí implementace této funkce jednoduše vrátí hodnotu FALSE.

Pokud je phGlobal NULL, měl by být přidělen nový HGLOBAL a vrácen v phGlobal. V opačném případě by měl být HGLOBAL určený phGlobal vyplněn daty. Množství dat umístěných v HGLOBAL nesmí překročit aktuální velikost paměťového bloku. Blok navíc nelze převést na větší velikost.

Jedná se o pokročilý přepis. Přepište tuto funkci tak, aby byla data v požadovaném formátu a médiu. V závislosti na datech můžete místo toho chtít přepsat jednu z dalších verzí této funkce. Pokud chcete zpracovat více úložných médií, přepište OnRenderData. Pokud jsou vaše data v souboru nebo mají proměnnou velikost, přepište OnRenderFileData. Další informace o zpožděném vykreslování, které zpracovává MFC, najdete v článku Datové objekty a zdroje dat: Manipulace.

Další informace naleznete ve struktuře FORMATETC a IDataObject::GetData v sadě Windows SDK.

COleDataSource::OnSetData

Volá se rozhraním k nastavení nebo nahrazení dat v objektu COleDataSource v zadaném formátu.

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

Parametry

lpFormatEtc
Odkazuje na strukturu FORMATETC určující formát, ve kterém jsou data nahrazena.

lpStgMedium
Odkazuje na strukturu STGMEDIUM obsahující data, která nahradí aktuální obsah objektu COleDataSource .

bRelease
Určuje, kdo má vlastnictví média úložiště po dokončení volání funkce. Volající rozhodne, kdo je zodpovědný za uvolnění prostředků přidělených jménem média úložiště. Volající to provede nastavením bRelease. Pokud bRelease je nenulová, zdroj dat převezme vlastnictví a uvolní médium po jeho použití. Pokud je hodnota bRelease 0, volající si zachová vlastnictví a zdroj dat může použít médium úložiště pouze po dobu trvání volání.

Vrácená hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Zdroj dat nepřebírají vlastnictví dat, dokud ho úspěšně nezískali. To znamená, že nepřebírají vlastnictví, pokud OnSetData vrátí hodnotu 0. Pokud zdroj dat převezme vlastnictví, uvolní médium úložiště voláním funkce ReleaseStgMedium .

Výchozí implementace nic nedělá. Přepište tuto funkci tak, aby nahradila data v zadaném formátu. Jedná se o pokročilý přepis.

Další informace najdete ve strukturách STGMEDIUM a FORMATETC a funkcí ReleaseStgMedium a IDataObject::GetData v sadě Windows SDK.

COleDataSource::SetClipboard

Umístí data obsažená v objektu ve COleDataSource schránce po volání jedné z následujících funkcí: CacheData, CacheGlobalData, DelayRenderData nebo DelayRenderFileData.

void SetClipboard();

Viz také

MFC – Ukázka HIERSVR
MFC – ukázka OCLIENT
CCmdTarget – třída
Graf hierarchie
COleDataObject – třída