Compartir a través de


Portapapeles: Usar el Portapapeles de Windows

En este tema se describe cómo utilizar el Portapapeles de Windows estándar API dentro de la aplicación MFC.

La mayoría de las aplicaciones para cortar o copiar datos en el Portapapeles de Windows y pegar de soporte de Windows datos del portapapeles. Los formatos de datos del portapapeles varían entre aplicaciones. El marco solo admite un número limitado de formatos del Portapapeles para un número limitado de clases. Implementará normalmente los comandos Portapapeles- relacionados — cortar, copiar, pegar y — en el menú Edición de la vista. La biblioteca de clases define los id. de comando para estos comandos: ID_EDIT_CUT, ID_EDIT_COPY, y ID_EDIT_PASTE. Los marcadores de la línea de mensajes también se definen.

Mensajes y comandos en el marco explica cómo controlar los comandos de menú de la aplicación asignando el comando de menú en una función de controlador. Mientras la aplicación no defina las funciones controladoras para los comandos del portapapeles en el menú Edición, permanecen deshabilitadas. Para escribir funciones controladoras para los comandos cortar y de copia, implemente la selección en la aplicación. Para escribir una función controladora para el comando pegar, vea el portapapeles para ver si contiene datos en un formato que la aplicación puede aceptar. Por ejemplo, para habilitar el comando de copia, puede escribir a controlador algo parecido 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();
}

Los comandos cortar, copy, y pegar solo son significativos en ciertos contextos. Los comandos cortar y de copia deben estar habilitados cuando algo está seleccionado, y el comando pegar cuando algo está en el portapapeles. Puede proporcionar este comportamiento definiendo las funciones de controlador de actualización que habilitan o deshabilitan estos comandos dependiendo del contexto. Para obtener más información, vea Cómo actualizar objetos de la Usuario-interfaz.

La biblioteca Microsoft Foundation Class proporciona compatibilidad del portapapeles para la modificación de texto con las clases de CEdit y de CEditView . Las clases VIEJAS también simplifican implementar las operaciones del portapapeles que implican elementos de OLE. Para obtener más información sobre las clases VIEJAS, vea Portapapeles: Utilizar el portapapeles OLE Mechanism.

Implementar otros comandos de menú de edición, como undo (ID_EDIT_UNDO) y rehacer (ID_EDIT_REDO), también se permite se. Si la aplicación no admite estos comandos, es fácil eliminarlos del archivo de recursos mediante los editores de recursos de Visual C++.

¿Sobre qué desea obtener más información?

Vea también

Conceptos

Portapapeles