Freigeben über


Zwischenablage: Verwenden der Windows-Zwischenablage

In diesem Thema wird beschrieben, wie die Standard-Windows-Zwischenablage API in der MFC-Anwendung verwendet.

Die meisten Anwendungen für Windows unterstützen Ausschnitt oder Kopieren von Daten zur Zwischenablage und das Einfügen von Daten aus der Zwischenablage. Die Zwischenablagedatenformate variieren in Anwendungen. Das Framework unterstützt nur eine begrenzte Anzahl Zwischenablageformate für eine begrenzte Anzahl Klassen. Sie implementieren die Zwischenablage-verknüpften normalerweise Befehle - schneiden Sie aus, Kopieren und fügen Sie ein - im Menü Bearbeiten für die Ansicht. Die Klassenbibliothek definiert die Befehls-IDs für diese Befehle: ID_EDIT_CUT, ID_EDIT_COPY und ID_EDIT_PASTE. die MeldungZeileneingabeaufforderungen werden ebenfalls definiert.

Meldungen und Befehle im Framework erläutert, wie Menübefehle in der Anwendung behandelt, indem dem Menübefehl zu eine Handlerfunktion zuordnet. Solange die Anwendung nicht Handlerfunktionen für die Zwischenablage Befehle im Menü Bearbeiten definiert, sie verbleiben deaktiviert. Um Handlerfunktionen für über die Befehle Ausschneiden und Kopierbefehle schreiben, implementieren Sie die Auswahl in der Anwendung. Um eine Handlerfunktion für den Befehl Einfügen zu schreiben, fragen Sie die Zwischenablage ab um festzustellen ob die Daten in einem Format enthält, das die Anwendung aufnehmen kann. Um beispielsweise den Kopierbefehl zu aktivieren, können z Sie Handler in etwa Folgendes:

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 Schnitt-, Kopieren und Einfügen sind in bestimmten Kontexten nur sinnvoll. Die Schnitt- und Kopierbefehle sollten aktiviert werden nur wenn etwas ausgewählt ist, und der Befehl Einfügen, wenn etwas in der Zwischenablage sind. Sie können dieses Verhalten im Definieren von Aktualisierungshandlerfunktionen bereitstellen, die diese Befehle in Abhängigkeit vom Kontext aktivieren oder deaktivieren. Weitere Informationen finden Sie unter Erstellen Benutzeroberfläche-Objekte aktualisiert.

Die Microsoft Foundation Class-Bibliothek bietet Unterstützung der Zwischenablage für Textausgabe mit den CEdit und CEditView-Klassen. Die OLE-Klassen vereinfachen außerdem das Implementieren von Zwischenablagevorgängen, die OLE-Elemente einschließen. Weitere Informationen über die OLE-Klassen, finden Sie unter Zwischenablage: Verwenden des OLE-Zwischenablage-Mechanismus.

Andere Bearbeitungsmenübefehle, wie implementiert, rückgängig machen (ID_EDIT_UNDO) und überprüfen Sie (ID_EDIT_REDO) ist, verlassen Sie auch. Wenn die Anwendung diese Befehle nicht unterstützt, können Sie diese von der Ressourcendatei mit Visual C++-Ressourcen-Editoren leicht löschen.

Worüber möchten Sie mehr erfahren?

Siehe auch

Konzepte

Zwischenablage