Objetos de dados e fontes de dados: A 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 sistema autônomo dois lados de uma transferência de dados.Este artigo explica quando criar e destruir esses objetos e fontes para executar transferências de dados adequadamente, incluindo:

  • Criando objetos de dados

  • Destruição de objetos de dados

  • Criação de fontes de dados

  • Destruição de fontes de dados

Criando objetos de dados

Objetos de dados são usados pelo aplicativo destino — o cliente ou servidor.Um objeto de dados no aplicativo de destino é uma extremidade de uma conexão entre o aplicativo de fonte 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 for solto dados em seu aplicativo com o recurso arrastar e soltar.A segunda situação é quando colar ou Colar especial é escolhido no menu ' edição '.

Em uma situação de do tipo arrastar e soltar, você não precisa criar um objeto de dados.Um ponteiro para um objeto de dados existentes será passado para o seu OnDrop função. Esse objeto de dados é criado pela estrutura sistema autônomo parte da operação do tipo arrastar e soltar e também será destruído por ele.Não é sempre o caso quando colagem é feita por outro método.Para obter mais informações, consulte Destruição de objetos de dados.

Se o aplicativo está executando uma operação especial de colar ou colar, você deve criar um COleDataObject objeto e chamar seu AttachClipboard função de membro. Isto associa o objeto de dados com os dados na área de transferência.Em seguida, você pode usar esse objeto de dados na sua função de colar.

Para obter um exemplo de como isso é concluído, consulte o DoPasteItem função no arquivo MAINVIEW.CPP que faz parte do MFC OLE amostra OCLIENT.OCLIENT implementa uma função que realiza todas as operações de colar e chama DoPasteItem from its OnDrop, OnPaste, e OnPasteLink funções.Porque OnDrop possui um ponteiro para um objeto de dados passado para ele, ele passa o ponteiro para DoPasteItem.OnPaste e OnPasteLink pass NULO para este parâmetro, informando DoPasteItem para criar um objeto de dados e anexá-lo para a área de transferência.Este esquema separa o código de colar para que você só precisa depurá-lo em um único local, mas você ainda poderá usá-lo para os dois tipos de operações de colar.

Destruição de objetos de dados

Se você seguir o esquema descrito em Criando objetos de dados, destruir objetos de dados é um aspecto comum de transferências de dados.O objeto de dados criado em sua função colar será destruído por MFC quando retorna sua função de colagem.

Se você seguir outro método de manipulação de operações de colar, certifique-se de 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 copiar dados com êxito para a área de transferência.

Criar fontes de dados

As fontes de dados são usadas pela fonte de transferência de dados, que pode ser o 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 criadas quando um aplicativo precisa para copiar dados para a área de transferência.Um cenário típico é executado como este:

  1. O usuário seleciona alguns dados.

  2. O usuário escolhe Cópia (or Recortar) from a edição menu ou inicia uma operação de do tipo arrastar e soltar.

  3. Dependendo do design do programa, o aplicativo cria qualquer um COleDataSource objeto ou um objeto de uma classe derivada de COleDataSource.

  4. Os dados selecionados são inseridos na fonte de dados, chamando uma das funções no COleDataSource::CacheData ou COleDataSource::DelayRenderData grupos.

  5. O aplicativo chama o SetClipboard função de membro (ou o DoDragDrop função de membro se essa é uma operação de do tipo arrastar e soltar) pertencentes ao objeto criado na etapa 3.

  6. Se este for um Recortar operação de ou DoDragDrop Retorna DROPEFFECT_MOVE, os dados selecionados na etapa 1 são excluídos do documento.

Esse cenário é implementado pelo MFC OLE Exemplos OCLIENT and HIERSVR.Examinar fonte para CView-classe derivada para todos menos o GetClipboardData e OnGetClipboardData funções. Essas duas funções são de uma a COleClientItem ou COleServerItem-derivados de implementações de classe. Esses programas de exemplo fornecem um mercadoria exemplo de como implementar esses conceitos.

Uma Outros situação na qual pode ser criar um COleDataSource objeto ocorre se você estiver modificando o comportamento padrão de uma operação de do tipo 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 manualmente a fonte de dados para OLE, sistema autônomo telefonar 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, assim sistema autônomo acontece com qualquer objeto de C++ típico.

Para obter mais informações, consulte Arrastar e soltar, Área de transferência, and Manipulação de objetos de dados e fontes de dados.

Consulte também

Conceitos

Objetos de dados e fontes de dados (OLE)

Referência

Classe COleDataObject

Classe COleDataSource