Área de Transferência: usando a Área de Transferência do Windows
Este tópico descreve como usar a API de Área de Transferência do Windows padrão em seu aplicativo MFC.
A maioria dos aplicativos para Windows tem suporte para recortar ou copiar dados para a Área de Transferência do Windows e para colar dados da Área de Transferência. Os formatos de dados da Área de Transferência variam entre os aplicativos. A estrutura dá suporte apenas a um número limitado de formatos de Área de Transferência para um número limitado de classes. Normalmente, você implementará os comandos relacionados à Área de Transferência – Recortar, Copiar e Colar – no menu Editar da exibição. A biblioteca de classes define as IDs de comando desses comandos: ID_EDIT_CUT, ID_EDIT_COPY e ID_EDIT_PASTE. Os prompts de linha de mensagem também são definidos.
Mensagens e comandos na estrutura explica como lidar com comandos de menu no aplicativo mapeando o comando de menu para uma função de manipulador. Desde que o aplicativo não defina funções de manipulador para os comandos da Área de Transferência no menu Editar, elas permanecerão desabilitadas. Para escrever funções de manipulador para os comandos Recortar e Copiar, implemente a seleção no aplicativo. Para escrever uma função de manipulador para o comando Colar, consulte a Área de Transferência para ver se ela contém dados em um formato que o aplicativo pode aceitar. Por exemplo, para habilitar o comando Copiar, você pode escrever um manipulador semelhante a:
void CMyListView::OnEditCopy()
{
if ( !OpenClipboard() )
{
AfxMessageBox( _T("Cannot open the Clipboard") );
return;
}
// Remove the current Clipboard contents
if( !EmptyClipboard() )
{
AfxMessageBox( _T("Cannot empty the Clipboard") );
return;
}
// Get the currently selected data
HGLOBAL hGlob = GlobalAlloc(GMEM_FIXED, 64);
strcpy_s((char*)hGlob, 64, "Current selection\r\n");
// For the appropriate data formats...
if ( ::SetClipboardData( CF_TEXT, hGlob ) == NULL )
{
CString msg;
msg.Format(_T("Unable to set Clipboard data, error: %d"), GetLastError());
AfxMessageBox( msg );
CloseClipboard();
GlobalFree(hGlob);
return;
}
CloseClipboard();
}
Os comandos Recortar, Copiar e Colar são significativos apenas em determinados contextos. Os comandos Recortar e Copiar deverão ser habilitados somente quando algo estiver selecionado, e o comando Colar somente quando algo estiver na Área de Transferência. Você pode fornecer esse comportamento definindo funções de manipulador de atualização que habilitam ou desabilitam esses comandos dependendo do contexto. Para obter mais informações, consulte Como atualizar objetos da interface do usuário.
A biblioteca Microsoft Foundation Class dá suporte de Área de Transferência para edição de texto com as classes CEdit
e CEditView
. As classes OLE também simplificam a implementação de operações de Área de Transferência que envolvem itens OLE. Para obter mais informações sobre as classes OLE, consulte Área de Transferência: usando o mecanismo de Área de Transferência OLE.
A implementação de outros comandos do menu Editar, como Desfazer (ID_EDIT_UNDO) e Refazer (ID_EDIT_REDO), também cabe a você. Se o aplicativo não der suporte a esses comandos, você poderá excluí-los facilmente do arquivo de recurso usando os editores de recursos do Visual C++.