Partager via


presse-papiers : Utiliser le presse-papiers windows

Cette rubrique explique comment utiliser l'API standard du Presse-papiers Windows dans votre application de MFC.

La plupart des applications Windows prennent en charge la coupe ou la copie de données dans le Presse-papiers Windows et le collage de données du Presse-papiers. Les formats de données du Presse-papiers varient entre les applications. L'infrastructure prend en charge qu'un nombre limité de formats de Presse-papiers pour un nombre limité de classes. Vous implémenterez normalement les commandes liées au Presse-papiers — Couper, Copier et Coller — dans le menu Edition pour votre vue. La bibliothèque de classes définit les ID de commande pour les commandes : ID_EDIT_CUT, ID_EDIT_COPY et ID_EDIT_PASTE. Leurs invites en ligne de message sont également définies.

Messages et Commandes dans l'Infrastructure explique comment gérer les commandes du menu dans votre application en mappant la commande de menu à la fonction gestionnaire. Tant que votre application ne définit pas de fonctions gestionnaires pour les commandes du Presse-papiers dans le menu Edition, elles restent désactivées. Pour écrire des fonctions gestionnaires pour les commandes Couper et Copier, implémentez sélection dans votre application. Pour écrire une fonction gestionnaire de la commande Coller, interrogez le Presse-papiers pour savoir s'il contient des données dans un format que votre application peut accepter. Par exemple, pour activer la commande Copier, vous pouvez entrer dans un gestionnaire quelque chose similaire à ce qui suit :

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();
}

Les commandes Couper, Copier et Coller n'ont de sens que dans certains contextes. Les commandes Couper et Copier doivent être activées uniquement lorsque quelque chose est sélectionné, et la commande Coller uniquement lorsque quelque chose se trouve dans le Presse-papiers. Vous pouvez spécifier ce comportement en définissant des fonctionnalités du gestionnaire de mises à jour qui activent ou désactivent ces commandes selon le contexte. Pour plus d'informations, consultez Procédure de mise à jour d'objets de l'interface utilisateur.

La bibliothèque de MFC fournit la prise en charge du Presse-papiers de pour l'édition de texte avec les classes d' CEdit et d' CEditView . Les classes d'OLE simplifient également l'implémentation d'opérations du presse-papiers impliquant des éléments d'OLE. Pour plus d'informations sur les classes d'OLE, consultez Presse-papiers : utilisation du mécanisme OLE du Presse-papiers.

L'implémentation d'autres commandes du menu Edition, telles que Défaire (ID_EDIT_UNDO) et Refaire (ID_EDIT_REDO), est également laissée à vous. Si votre application ne prend pas en charge ces commandes, vous pouvez facilement les supprimer à partir de votre fichier de ressources à l'aide des éditeurs de ressources Visual C++.

Sur quels éléments souhaitez-vous obtenir des informations supplémentaires ?

Voir aussi

Concepts

Presse-papiers