Compartilhar via


Objetos de dados e fontes de dados: manipulação

Depois que um objeto de dados ou fonte de dados tiver sido criado, você poderá executar várias operações comuns nos dados, como inserir e remover dados, enumerar os formatos em que os dados estão e muito mais. Este artigo descreve as técnicas necessárias para concluir as operações mais comuns. Os tópicos incluem:

Inserindo dados em uma fonte de dados

A forma como os dados são inseridos em uma fonte de dados depende se os dados são fornecidos imediatamente ou sob demanda e em qual meio eles são fornecidos. As possibilidades são as seguintes.

Fornecendo dados imediatamente (renderização imediata)

  • Chame COleDataSource::CacheGlobalData repetidamente para cada formato de área de transferência no qual você está fornecendo dados. Passe o formato de área de transferência a ser usado, um identificador para a memória que contém os dados e, opcionalmente, uma estrutura FORMATETC que descreve os dados.

    - ou -

  • Se você quiser trabalhar diretamente com estruturas STGMEDIUM , chame COleDataSource::CacheData em vez de COleDataSource::CacheGlobalData na opção acima.

Fornecendo dados sob demanda (renderização atrasada)

Este é um tópico avançado.

  • Chame COleDataSource::DelayRenderData repetidamente para cada formato de área de transferência no qual você está fornecendo dados. Passe o formato da área de transferência a ser usado e, opcionalmente, uma estrutura FORMATETC que descreve os dados. Quando os dados forem solicitados, a estrutura chamará COleDataSource::OnRenderData, que você deve substituir.

    - ou -

  • Se você usar um CFile objeto para fornecer os dados, chame COleDataSource::DelayRenderFileData em vez de COleDataSource::DelayRenderData na opção anterior. Quando os dados forem solicitados, a estrutura chamará COleDataSource::OnRenderFileData, que você deve substituir.

Determinando os formatos disponíveis em um objeto de dados

Antes que um aplicativo permita que o usuário cole dados nele, ele precisa saber se há formatos na Área de Transferência que ele pode manipular. Para fazer isso, seu aplicativo deve fazer o seguinte:

  1. Crie um COleDataObject objeto e uma estrutura FORMATETC .

  2. Chame a função membro do AttachClipboard objeto de dados para associar o objeto de dados aos dados na Área de Transferência.

  3. Siga um destes procedimentos:

    • Chame a função membro do IsDataAvailable objeto de dados se houver apenas um ou dois formatos necessários. Isso economizará tempo nos casos em que os dados na Área de Transferência dão suporte a significativamente mais formatos do que seu aplicativo.

      - ou -

    • Chame a função membro do BeginEnumFormats objeto de dados para começar a enumerar os formatos disponíveis na Área de Transferência. Em seguida, chame GetNextFormat até que a Área de Transferência retorne um formato compatível com seu aplicativo ou não haja mais formatos.

Se você estiver usando ON_UPDATE_COMMAND_UI, agora poderá habilitar a Colagem e, possivelmente, colar itens especiais no menu Editar. Para fazer isso, chame ou CMenu::EnableMenuItemCCmdUI::Enable. Para obter mais informações sobre o que os aplicativos de contêiner devem fazer com itens de menu e quando, consulte Menus e Recursos: Adições de Contêiner.

Recuperando dados de um objeto de dados

Depois de decidir um formato de dados, tudo o que resta é recuperar os dados do objeto de dados. Para fazer isso, o usuário decide onde colocar os dados e o aplicativo chama a função apropriada. Os dados estarão disponíveis em um dos seguintes meios:

Médio Função a ser chamada
Memória Global (HGLOBAL) COleDataObject::GetGlobalData
Arquivo (CFile) COleDataObject::GetFileData
Estrutura STGMEDIUM (IStorage) COleDataObject::GetData

Normalmente, o meio será especificado junto com seu formato de área de transferência. Por exemplo, um objeto CF_EMBEDDEDSTRUCT está sempre em um IStorage meio que requer uma estrutura STGMEDIUM . Portanto, você usaria GetData porque é a única dessas funções que pode aceitar uma estrutura STGMEDIUM .

Para casos em que o formato área de transferência está em um IStream ou HGLOBAL meio, a estrutura pode fornecer um CFile ponteiro que faz referência aos dados. Em seguida, o aplicativo pode usar a leitura de arquivo para obter os dados da mesma maneira que pode importar dados de um arquivo. Essencialmente, essa é a interface do lado do cliente para as rotinas e OnRenderFileData rotinas OnRenderData na fonte de dados.

O usuário agora pode inserir dados no documento da mesma forma que qualquer outro dado no mesmo formato.

O que você quer saber mais sobre

Consulte também

Objetos de dados e fontes de dados (OLE)
Classe COleDataObject
Classe COleDataSource