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 deCOleDataSource::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, chameCOleDataSource::DelayRenderFileData
em vez deCOleDataSource::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:
Crie um objeto
COleDataObject
e uma estrutura FORMATETC.Chame a função membro
AttachClipboard
do objeto de dados para associar o objeto de dados aos dados na Área de Transferência.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, chameGetNextFormat
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