Objetos de dados e fontes de dados: criação e destruição
Conforme explicado no artigo objetos de dados e fontes de dados (OLE), objetos de dados e fontes de dados representam os dois lados de uma transferência de dados.Este artigo explica quando criar e destruir esses objetos e fontes para realizar suas transferências de dados corretamente, incluindo:
Criando objetos de dados
Destruição de objetos de dados
Criar fontes de dados
Destruição de fontes de dados
Criando objetos de dados
Objetos de dados são usados pelo aplicativo de destino — o cliente ou servidor.Um objeto de dados no aplicativo de destino é uma extremidade de uma conexão entre o aplicativo de origem e o aplicativo de destino.Um objeto de dados no aplicativo de destino é usado para acessar e interagir com os dados na fonte de dados.
Há duas situações onde um objeto de dados é necessária.A primeira situação é quando dados cair em seu aplicativo usando arrastar e soltar.A segunda situação é quando colar ou Colar especial é escolhido no menu Editar.
Em uma situação de arrastar e soltar, você não precisará criar um objeto de dados.Um ponteiro para um objeto de dados existente será passado para seu OnDrop função.Esse objeto de dados é criado pela estrutura como parte da operação de arrastar e soltar e também será destruído por ele.Isso não é sempre o caso quando colar é feito por outro método.Para obter mais informações, consulte Destruir objetos de dados.
Se o aplicativo está executando um colar ou uma operação de Colar especial, você deve criar um COleDataObject objeto e chamar seus AttachClipboard função de membro.Isso associa o objeto de dados com os dados na área de transferência.Você pode usar esse objeto de dados no seu Colar função.
Um exemplo de como isso é feito, consulte o DoPasteItem função de MAINVIEW.CPP de arquivo que é parte do MFC OLE exemplo OCLIENT.OCLIENT implementa uma função que realiza todas as operações de colagem e chamadas DoPasteItem do seu OnDrop, OnPaste, e OnPasteLink funções.Porque OnDrop tem um ponteiro para um objeto de dados passado para ele, ele passa o ponteiro para DoPasteItem.OnPastee OnPasteLink passar Nulo para este parâmetro, informando DoPasteItem criar um objeto de dados e anexá-lo para a área de transferência.Esse esquema separa o código de colar, você precisa depurá-lo em um lugar, mas ele ainda pode ser usado para ambos os tipos de operações de colagem.
Destruição de objetos de dados
Se você seguir o esquema descrito em Criando objetos de dados, destruir objetos de dados é um aspecto trivial de transferência de dados.O objeto de dados que foi criado em seu Colar função será destruído por MFC quando seu Colar função retorna.
Se você seguir outro método de manipulação de operações de colagem, verifique se que o objeto de dados é destruído após a conclusão da operação de colar.Até que o objeto de dados é destruído, será impossível para qualquer aplicativo com êxito copiar dados para a área de transferência.
Criar fontes de dados
Fontes de dados são usados pela fonte de transferência de dados, que pode ser cliente ou servidor de transferência de dados.Uma fonte de dados no aplicativo de origem é uma extremidade de uma conexão entre o aplicativo de origem e o aplicativo de destino.Um objeto de dados no aplicativo de destino é usado para interagir com os dados na fonte de dados.
Fontes de dados são criados quando um aplicativo precisa copiar dados para a área de transferência.Um cenário típico é executado como este:
O usuário seleciona alguns dados.
O usuário escolhe Copy (ou Cut) do Editar menu ou começa uma operação de arrastar e soltar.
Dependendo do design do programa, o aplicativo cria tanto uma COleDataSource objeto ou uma classe derivada de COleDataSource.
Os dados selecionados são inseridos na fonte de dados chamando um das funções do COleDataSource::CacheData ou COleDataSource::DelayRenderData grupos.
O aplicativo chama o SetClipboard função de membro (ou o DoDragDrop função de membro se essa é uma operação de arrastar e soltar) pertencentes ao objeto criado na etapa 3.
Se este for um Cut operação ou DoDragDrop retorna DROPEFFECT_MOVE, os dados selecionados na etapa 1 são excluídos do documento.
Este cenário é implementado pelo MFC OLE exemplos OCLIENT e HIERSVR.Examinar a origem para cada aplicativo CView-derivado classe para tudo, mas o GetClipboardData e OnGetClipboardData funções.Essas duas funções são em ambos os COleClientItem ou COleServerItem-derivadas implementações de classe.Esses programas de exemplo fornecem um bom exemplo de como implementar esses conceitos.
Uma outra situação em que você talvez queira criar um COleDataSource objeto ocorre se você estiver modificando o comportamento padrão de uma operação de arrastar e soltar.Para obter mais informações, consulte o arrastar e soltar: Personalizando artigo.
Destruição de fontes de dados
Fontes de dados devem ser destruídos pelo aplicativo atualmente é responsável por eles.Em situações onde você entrega a fonte de dados para OLE, como chamar COleDataSource::DoDragDrop, você precisará chamar pDataSrc - > InternalRelease.Por exemplo:
void CMyListView::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(pResult);
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
CMyDataSource* pDataSrc = new CMyDataSource();
if (NULL != pDataSrc)
{
pDataSrc->Initialize(pNMLV, this);
pDataSrc->DelayRenderData(
(CLIPFORMAT)RegisterClipboardFormat(_T("TIGroupFiles")));
pDataSrc->DoDragDrop();
pDataSrc->InternalRelease();
}
}
Se você não tiver entregue sua fonte de dados para OLE, em seguida, você é responsável por destruí-lo, como com qualquer objeto C++ típico.
Para obter mais informações, consulte arrastar e soltar, transferência, e fontes de dados e manipular objetos de dados.