Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Conforme explicado no artigo Data Objects and Data Sources (OLE), os objetos de dados e as fontes de dados representam ambos os lados de uma transferência de dados. Este artigo explica quando criar e destruir esses objetos e fontes para executar suas transferências de dados corretamente, incluindo:
Criando objetos de dados
Os objetos de dados são usados pelo aplicativo de destino — o cliente ou o 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 comuns em que um objeto de dados é necessário. A primeira situação é quando os dados são descartados no seu aplicativo através da funcionalidade de 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 precisa criar um objeto de dados. Um ponteiro para um objeto de dados existente será passado para a função OnDrop. Este objeto de dados é criado pela estrutura como parte da operação de arrastar e soltar e também será destruído por ela. Este nem sempre é o caso quando a colagem é feita por outro método. Para obter mais informações, consulte Destruindo objetos de dados.
Se o aplicativo estiver executando uma operação especial de colar ou colar, você deve criar um COleDataObject objeto e chamar sua AttachClipboard função de membro. Isso associa o objeto de dados aos dados na área de transferência. Em seguida, você pode usar esse objeto de dados em sua função de colagem.
Destruindo objetos de dados
Se você seguir o esquema descrito em Criando objetos de dados, destruir objetos de dados é um aspeto trivial das transferências de dados. O objeto de dados que foi criado em sua função de colar será destruído pelo MFC quando sua função de colar retornar.
Se você seguir outro método de manipulação de operações de colagem, verifique se o objeto de dados é destruído após a conclusão da operação de colagem. Até que o objeto de dados seja destruído, será impossível para qualquer aplicação copiar dados com êxito para a Área de Transferência.
Criação de fontes de dados
As fontes de dados são usadas pela fonte da transferência de dados, que pode ser o cliente ou o lado do servidor da 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.
As fontes de dados são criadas quando um aplicativo precisa copiar dados para a Área de Transferência. Um cenário típico é executado assim:
O usuário seleciona alguns dados.
O usuário escolhe Copiar (ou Recortar) no menu Editar ou inicia uma operação de arrastar e soltar.
Dependendo do design do programa, o aplicativo cria um
COleDataSourceobjeto ou um objeto de uma classe derivada deCOleDataSource.Os dados selecionados são inseridos na fonte de dados chamando uma das funções nos grupos
COleDataSource::CacheDataouCOleDataSource::DelayRenderData.A aplicação chama a função de membro
SetClipboard(ou a função de membroDoDragDropse esta for uma operação de arrastar e soltar) pertencente ao objeto criado na etapa 3.Se esta for uma operação Cortar ou
DoDragDropretornar DROPEFFECT_MOVE, os dados selecionados na etapa 1 serão excluídos do documento.
Este cenário é implementado pelos exemplos OLE MFC OCLIENT e HIERSVR. Observe a origem da classe derivada de cada aplicativo para todas as funções, exceto as funções CView e GetClipboardData. Estas duas funções estão nas implementações das classes derivadas de COleClientItem ou COleServerItem. Esses programas de exemplo fornecem um bom exemplo de como implementar esses conceitos.
Uma outra situação em que você pode querer 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 artigo OLE Arrastar e soltar: Personalizar arrastar e soltar .
Destruindo fontes de dados
As fontes de dados devem ser destruídas pelo aplicativo atualmente responsável por elas. Em situações em que se entrega a fonte de dados para OLE, como ao chamar COleDataSource::DoDragDrop, é necessário 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 entregou sua fonte de dados para OLE, então você é responsável por destruí-la, como com qualquer objeto C++ típico.
Para obter mais informações, consulte Arrastar e soltar, Área de transferência e Manipulação de objetos de dados e fontes de dados.
Ver também
Objetos de dados e fontes de dados (OLE)
COleDataObject Classe
COleDataSource Classe