Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Conforme explicado no artigo Objetos de Dados e Fontes de Dados (OLE), objetos de dados e 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 removidos 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 precisa criar um objeto de dados. Um ponteiro para um objeto de dados existente será passado para sua 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. Nem sempre esse é o caso quando a colagem é feita por outro método. Para obter mais informações, consulte Destroying Data Objects.
Se o aplicativo estiver executando uma operação especial de colar ou colar, você deverá 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 na criação de objetos de dados, destruir objetos de dados será um aspecto trivial das transferências de dados. O objeto de dados que foi criado em sua função de colagem será destruído pelo MFC quando sua função de colagem retornar.
Se você seguir outro método de tratamento de operações de colagem, verifique se o objeto de dados será 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 aplicativo copiar dados com êxito para a Área de Transferência.
Criando fontes de dados
As fontes de dados são usadas pela origem 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 no grupo ou
COleDataSource::DelayRenderDatanoCOleDataSource::CacheDatagrupo.O aplicativo chama a
SetClipboardfunção membro (ou aDoDragDropfunção membro, se essa for uma operação de arrastar e soltar) pertencente ao objeto criado na etapa 3.Se essa for uma operação Decorar ou
DoDragDropretornar DROPEFFECT_MOVE, os dados selecionados na etapa 1 serão excluídos do documento.
Esse cenário é implementado pelos exemplos OCLIENT e HIERSVR do OLE do MFC. Examine a origem da classe derivada de CViewcada aplicativo para todos, exceto as funções e OnGetClipboardData as GetClipboardData funções. Essas duas funções estão nas COleClientItemCOleServerItemimplementações de classe ou derivadas. Esses programas de exemplo fornecem um bom exemplo de como implementar esses conceitos.
Uma outra situação em que talvez você queira criar um COleDataSource objeto ocorrerá se você estiver modificando o comportamento padrão de uma operação de arrastar e soltar. Para obter mais informações, consulte o artigo Arrastar e soltar OLE: Personalizar o artigo 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 você entrega a fonte de dados ao OLE, como chamar COleDataSource::D oDragDrop, você precisa 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 ao OLE, será responsável por destruí-la, como acontece 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.
Consulte também
Objetos de dados e fontes de dados (OLE)
Classe COleDataObject
Classe COleDataSource