Compartilhar via


Objetos e origens 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 dos dados e muito mais. Este artigo descreve as técnicas necessárias para concluir as operações mais comuns. Os tópicos incluem:

Inserir 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 por qual meio eles são fornecidos. As possibilidades são como segue.

Fornecer 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 da Á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.

Fornecer dados sob demanda (renderização atrasada)

Esse é 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 objeto CFile 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.

Determinar 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, proceda da seguinte maneira:

  1. Crie um objeto COleDataObject e uma estrutura FORMATETC.

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

  3. Realize um dos seguintes procedimentos:

    • Chame a função membro IsDataAvailable do 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 o aplicativo.

      -ou-

    • Chame a função membro BeginEnumFormats do 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 o seu aplicativo ou não haja mais formatos.

Se estiver usando ON_UPDATE_COMMAND_UI, agora você pode habilitar a opção de Colar e, possivelmente, colar itens especiais no menu Editar. Para fazer isso, chame CMenu::EnableMenuItem ou CCmdUI::Enable. Para obter mais informações sobre o que os aplicativos de contêiner devem fazer com itens de menu e quando fazer, 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 falta é 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 o respectivo formato de Área de Transferência. Por exemplo, um objeto CF_EMBEDDEDSTRUCT está sempre em um meio IStorage 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 da Área de Transferência está em um meio IStream ou HGLOBAL, a estrutura pode fornecer um ponteiro CFile que referencia os dados. Em seguida, o aplicativo pode usar a leitura do arquivo para obter os dados da mesma maneira que pode importar dados de um arquivo. Basicamente, essa é a interface do lado do cliente para as rotinas OnRenderData e OnRenderFileData na fonte de dados.

Agora, o usuário pode inserir dados no documento como qualquer outro dado no mesmo formato.

O que mais você deseja saber?

Confira também

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