Schránka: Použití mechanismu schránky OLE
OLE používá standardní formáty a některé formáty specifické pro OLE pro přenos dat prostřednictvím schránky.
Při vyjmutí nebo zkopírování dat z aplikace se data uloží do schránky, která se použijí později při operacích vložení. Tato data jsou v různých formátech. Když se uživatel rozhodne vložit data ze schránky, může aplikace zvolit, které z těchto formátů chcete použít. Aplikace by měla být zapsána, aby zvolila formát, který poskytuje nejvíce informací, pokud uživatel výslovně nepožádá o určitý formát pomocí příkazu Vložit jinak. Než budete pokračovat, možná budete chtít přečíst témata o datových objektech a zdrojích dat (OLE). Popisují základy toho, jak fungují přenosy dat a jak je implementovat ve vašich aplikacích.
Systém Windows definuje řadu standardních formátů, které lze použít k přenosu dat prostřednictvím schránky. Patří mezi ně metasoubory, text, rastrové obrázky a další. OLE definuje také řadu formátů specifických pro OLE. Pro aplikace, které potřebují více podrobností než tyto standardní formáty, je vhodné zaregistrovat vlastní formáty schránky. K tomu použijte funkci Rozhraní API Win32 RegisterClipboardFormat .
Microsoft Excel například zaregistruje vlastní formát tabulek. Tento formát má mnohem více informací, než například rastrový obrázek. Když se tato data vloží do aplikace, která podporuje formát tabulky, zachovají se všechny vzorce a hodnoty z tabulky a v případě potřeby je možné je aktualizovat. Aplikace Microsoft Excel také vkládá data do schránky ve formátech, aby je bylo možné vložit jako položku OLE. Jakýkoli kontejner dokumentů OLE může tyto informace vložit jako vloženou položku. Tuto vloženou položku lze změnit pomocí aplikace Microsoft Excel. Schránka obsahuje také jednoduchý rastrový obrázek vybrané oblasti v tabulce. To lze také vložit do kontejnerů dokumentů OLE nebo do rastrových editorů, jako je Malování. V případě rastrového obrázku však neexistuje způsob, jak manipulovat s daty jako s tabulkou.
Pokud chcete načíst maximální množství informací ze schránky, musí aplikace před vložením dat ze schránky zkontrolovat tyto vlastní formáty.
Pokud chcete například povolit příkaz Vyjmout, můžete napsat obslužnou rutinu, která vypadá nějak takto:
void CMyListView::OnEditCut()
{
// Create an OLE data source on the heap
COleDataSource* pData = new COleDataSource;
// Get the currently selected data
HGLOBAL hGlob = GlobalAlloc(GMEM_FIXED, 64);
strcpy_s((char*)hGlob, 64, "Current selection\r\n");
// For the appropriate data formats...
pData->CacheGlobalData( CF_TEXT, hGlob );
// The Clipboard now owns the allocated memory
// and will delete this data object
// when new data is put on the Clipboard
pData->SetClipboard();
}