Zwischenablage: Verwenden des OLE-Zwischenablagemechanismus
OLE verwendet Standardformate und einige OLE-spezifische Formate zum Übertragen von Daten über die Zwischenablage.
Wenn Sie Daten aus einer Anwendung ausschneiden oder kopieren, werden die Daten in der Zwischenablage gespeichert, die später in Einfügevorgängen verwendet werden sollen. Diese Daten sind in einer Vielzahl von Formaten enthalten. Wenn ein Benutzer Daten aus der Zwischenablage einfüge, kann die Anwendung auswählen, welche dieser Formate verwendet werden sollen. Die Anwendung sollte geschrieben werden, um das Format auszuwählen, das die meisten Informationen bereitstellt, es sei denn, der Benutzer fragt ein bestimmtes Format mit "Inhalte einfügen". Bevor Sie fortfahren, sollten Sie die Themen "Data Objects and Data Sources" (OLE) lesen. Sie beschreiben die Grundlagen der Funktionsweise von Datenübertragungen und deren Implementierung in Ihren Anwendungen.
Windows definiert eine Reihe von Standardformaten, die zum Übertragen von Daten über die Zwischenablage verwendet werden können. Dazu gehören Metadateien, Text, Bitmaps und andere. OLE definiert auch eine Reihe von OLE-spezifischen Formaten. Für Anwendungen, die mehr Details benötigen als bei diesen Standardformaten, empfiehlt es sich, eigene benutzerdefinierte Zwischenablageformate zu registrieren. Verwenden Sie dazu die Win32-API-Funktion RegisterClipboardFormat .
Beispielsweise registriert Microsoft Excel ein benutzerdefiniertes Format für Tabellenkalkulationen. Dieses Format enthält viel mehr Informationen als z. B. eine Bitmap. Wenn diese Daten in eine Anwendung eingefügt werden, die das Tabellenkalkulationsformat unterstützt, werden alle Formeln und Werte aus der Kalkulationstabelle beibehalten und können bei Bedarf aktualisiert werden. Microsoft Excel fügt auch Daten in die Zwischenablage in Formaten ein, sodass sie als OLE-Element eingefügt werden können. Jeder OLE-Dokumentcontainer kann diese Informationen als eingebettetes Element einfügen. Dieses eingebettete Element kann mithilfe von Microsoft Excel geändert werden. Die Zwischenablage enthält auch eine einfache Bitmap des Bilds des ausgewählten Bereichs auf der Kalkulationstabelle. Dies kann auch in OLE-Dokumentcontainer oder Bitmap-Editoren wie Paint eingefügt werden. Bei einer Bitmap gibt es jedoch keine Möglichkeit, die Daten als Kalkulationstabelle zu bearbeiten.
Um die maximale Menge an Informationen aus der Zwischenablage abzurufen, sollten Anwendungen vor dem Einfügen von Daten aus der Zwischenablage nach diesen benutzerdefinierten Formaten suchen.
Um beispielsweise den Befehl "Ausschneiden" zu aktivieren, können Sie einen Handler wie den folgenden schreiben:
void CMyListView::OnEditCut()
{
// Create an OLE data source on the heap
COleDataSource* pData = new COleDataSource;
// 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...
pData->CacheGlobalData( CF_TEXT, hGlob );
// The Clipboard now owns the allocated memory
// and will delete this data object
// when new data is put on the Clipboard
pData->SetClipboard();
}