Portapapeles: Usar el Portapapeles de Windows
En este tema se describe cómo usar la API estándar del Portapapeles de Windows dentro de la aplicación MFC.
La mayoría de las aplicaciones para Windows permiten cortar o copiar datos en el Portapapeles de Windows y pegar datos desde el Portapapeles. Los formatos de datos del Portapapeles varían entre las aplicaciones. El marco de trabajo solo admite un número limitado de formatos de Portapapeles para un número limitado de clases. Normalmente, se implementan los comandos relacionados con el Portapapeles (Cortar, Copiar y Pegar) en el menú Editar de la vista. La biblioteca de clases define los identificadores de comandos para estos comandos: ID_EDIT_CUT, ID_EDIT_COPY y ID_EDIT_PASTE. También se definen sus mensajes de línea de mensaje.
En Mensajes y comandos en el marco se explica cómo controlar los comandos de menú de la aplicación asignando el comando de menú a una función de controlador. Siempre que la aplicación no defina funciones de controlador para los comandos del Portapapeles en el menú Editar, permanecen deshabilitadas. Para escribir funciones de controlador para los comandos Cortar y Copiar, implemente la selección en la aplicación. Para escribir una función de controlador para el comando Pegar, consulte el Portapapeles para ver si contiene datos en un formato que la aplicación puede aceptar. Por ejemplo, para habilitar el comando Copiar, puede escribir un controlador similar al siguiente:
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();
}
Los comandos Cortar, Copiar y Pegar solo son significativos en determinados contextos. Los comandos Cortar y Copiar solo deben habilitarse cuando se selecciona algo y el comando Pegar solo cuando hay algo en el Portapapeles. Puede proporcionar este comportamiento definiendo funciones de controlador de actualizaciones que habilitan o deshabilitan estos comandos en función del contexto. Para obtener más información, consulte Procedimiento para actualizar objetos de la interfaz de usuario.
La biblioteca MFC (Microsoft Foundation Class) proporciona compatibilidad con el Portapapeles para la edición de texto con las clases CEdit
y CEditView
. Las clases OLE también simplifican la implementación de operaciones del Portapapeles que implican elementos OLE. Para obtener más información sobre las clases OLE, consulte Portapapeles: Usar el mecanismo del Portapapeles de OLE.
La implementación de otros comandos del menú Editar, como Deshacer (ID_EDIT_UNDO) y Rehacer (ID_EDIT_REDO), también se deja a su criterio. Si la aplicación no admite estos comandos, puede eliminarlos fácilmente del archivo de recursos mediante los editores de recursos de Visual C++.