Área de Transferência: usando o mecanismo Área de Transferência OLE
O OLE usa formatos padrão e alguns formatos específicos do OLE para transferir dados por meio da Área de Transferência.
Quando você recorta ou copia dados de um aplicativo, os dados são armazenados na Área de Transferência para serem usados posteriormente em operações de colagem. Esses dados têm uma variedade de formatos. Quando um usuário opta por colar dados da Área de Transferência, o aplicativo pode escolher qual desses formatos usar. O aplicativo deve ser escrito para escolher o formato que fornece mais informações, a menos que o usuário solicite especificamente um determinado formato usando Colar Especial. Antes de continuar, talvez você queira ler os tópicos sobre Objetos de dados e fontes de dados (OLE). Eles descrevem os conceitos básicos de como as transferências de dados funcionam e como implementá-las em seus aplicativos.
O Windows define uma série de formatos padrão que podem ser usados para transferir dados por meio da Área de Transferência. Eles incluem meta-arquivos, texto, bitmaps e outros. O OLE também define vários formatos específicos do OLE. Para aplicativos que precisam de mais detalhes do que os fornecidos por esses formatos padrão, é uma boa ideia registrar seus formatos personalizados da Área de Transferência. Use a função da API Win32 RegisterClipboardFormat para fazer isso.
Por exemplo, o Microsoft Excel registra um formato personalizado para planilhas. Esse formato carrega muito mais informações do que, por exemplo, um bitmap. Quando esses dados são colados em um aplicativo que dá suporte ao formato de planilha, todas as fórmulas e valores da planilha são retidos e podem ser atualizados, se necessário. O Microsoft Excel também coloca dados na Área de Transferência em formatos para que possam ser colados como um item OLE. Qualquer contêiner de documento OLE pode colar essas informações como um item inserido. Esse item inserido pode ser alterado usando o Microsoft Excel. A Área de Transferência também contém um bitmap simples da imagem do intervalo selecionado na planilha. Isso também pode ser colado em contêineres de documentos OLE ou em editores de bitmap, como o Paint. No caso de um bitmap, no entanto, não há como manipular os dados como uma planilha.
Para recuperar a quantidade máxima de informações da Área de Transferência, os aplicativos devem verificar esses formatos personalizados antes de colar dados da Área de Transferência.
Por exemplo, para habilitar o comando Recortar, você pode escrever um manipulador semelhante a:
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();
}