Zwischenablage: Verwenden der Windows-Zwischenablage

In diesem Thema wird beschrieben, wie Sie die standardmäßige Windows-Zwischenablage-API in Ihrer MFC-Anwendung verwenden.

Die meisten Anwendungen für Windows unterstützen das Ausschneiden oder Kopieren von Daten in die Windows-Zwischenablage und das Einfügen von Daten aus der Zwischenablage. Die Datenformate der Zwischenablage variieren je nach Anwendung. Das Framework unterstützt nur eine begrenzte Anzahl von Zwischenablageformaten für eine begrenzte Anzahl von Klassen. Normalerweise implementieren Sie die Befehle "Zwischenablage", "Ausschneiden", "Kopieren" und "Einfügen" im Menü "Bearbeiten" für Ihre Ansicht. Die Klassenbibliothek definiert die Befehls-IDs für diese Befehle: ID_EDIT_CUT, ID_EDIT_COPY und ID_EDIT_PASTE. Ihre Nachrichtenzeilenaufforderungen werden ebenfalls definiert.

Nachrichten und Befehle im Framework erläutern, wie Menübefehle in Ihrer Anwendung behandelt werden, indem der Menübefehl einer Handlerfunktion zugeordnet wird. Solange ihre Anwendung keine Handlerfunktionen für die Befehle "Zwischenablage" im Menü "Bearbeiten" definiert, werden sie wieder deaktiviert Standard. Um Handlerfunktionen für die Befehle "Ausschneiden" und "Kopieren" zu schreiben, implementieren Sie die Auswahl in Ihrer Anwendung. Um eine Handlerfunktion für den Befehl "Einfügen" zu schreiben, fragen Sie die Zwischenablage ab, um festzustellen, ob sie Daten in einem Format enthält, das Ihre Anwendung akzeptieren kann. Um beispielsweise den Befehl "Kopieren" zu aktivieren, können Sie einen Handler wie den folgenden schreiben:

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

Die Befehle "Ausschneiden", "Kopieren" und "Einfügen" sind nur in bestimmten Kontexten aussagekräftig. Die Befehle "Ausschneiden" und "Kopieren" sollten nur aktiviert werden, wenn etwas ausgewählt ist, und der Befehl "Einfügen" nur, wenn sich etwas in der Zwischenablage befindet. Sie können dieses Verhalten bereitstellen, indem Sie Updatehandlerfunktionen definieren, die diese Befehle je nach Kontext aktivieren oder deaktivieren. Weitere Informationen finden Sie unter How to Update User-Interface Objects.

Die Microsoft Foundation-Klassenbibliothek bietet Unterstützung für die Textbearbeitung mit den CEdit Und-Klassen CEditView . Die OLE-Klassen vereinfachen auch die Implementierung von Zwischenablagevorgängen, die OLE-Elemente umfassen. Weitere Informationen zu den OLE-Klassen finden Sie unter "Zwischenablage: Verwenden des OLE-Zwischenablagemechanismus".

Das Implementieren anderer Menübefehle "Bearbeiten" wie "Rückgängig" (ID_EDIT_UNDO) und "Wiederholen" (ID_EDIT_REDO) bleibt Ihnen ebenfalls überlassen. Wenn Ihre Anwendung diese Befehle nicht unterstützt, können Sie sie mithilfe der Visual C++-Ressourcen-Editoren ganz einfach aus der Ressourcendatei löschen.

Was möchten Sie mehr über

Siehe auch

Zwischenablage