Presse-papiers : utilisation du Presse-papiers Windows
Cette rubrique explique comment utiliser l’API Presse-papiers Windows standard au sein de votre application MFC.
La plupart des applications pour Windows prennent en charge la coupe ou la copie de données dans le Presse-papiers Windows et le collage de données à partir du Presse-papiers. Les formats de données du Presse-papiers varient selon les applications. L’infrastructure ne prend en charge qu’un nombre limité de formats Presse-papiers pour un nombre limité de classes. Vous implémentez normalement les commandes associées au Presse-papiers ( Couper, Copier et Coller) dans le menu Modifier pour votre affichage. La bibliothèque de classes définit les ID de commande pour ces commandes : ID_EDIT_CUT, ID_EDIT_COPY et ID_EDIT_PASTE. Leurs invites de ligne de message sont également définies.
Les messages et les commandes dans l’infrastructure expliquent comment gérer les commandes de menu dans votre application en mappant la commande de menu à une fonction de gestionnaire. Tant que votre application ne définit pas de fonctions de gestionnaire pour les commandes Presse-papiers dans le menu Édition, elles restent désactivées. Pour écrire des fonctions de gestionnaire pour les commandes Couper et Copier, implémentez la sélection dans votre application. Pour écrire une fonction de gestionnaire pour la commande Coller, interrogez le Presse-papiers pour voir s’il contient des données dans un format que votre application peut accepter. Par exemple, pour activer la commande Copier, vous pouvez écrire un gestionnaire comme 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 ne sont significatives 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 fournir ce comportement en définissant des fonctions de gestionnaire de mise à jour qui activent ou désactivent ces commandes en fonction du contexte. Pour plus d’informations, consultez Comment mettre à jour des objets d’interface utilisateur.
La bibliothèque de classes Microsoft Foundation prend en charge le Presse-papiers pour la modification de texte avec les classes et CEditView
les CEdit
classes. Les classes OLE simplifient également l’implémentation d’opérations de Presse-papiers qui impliquent des éléments OLE. Pour plus d’informations sur les classes OLE, consultez Presse-papiers : Utilisation du mécanisme de Presse-papiers OLE.
L’implémentation d’autres commandes de menu Modifier, telles que Annuler (ID_EDIT_UNDO) et Rétablir (ID_EDIT_REDO), est également laissée à vous. Si votre application ne prend pas en charge ces commandes, vous pouvez facilement les supprimer de votre fichier de ressources à l’aide des éditeurs de ressources Visual C++.