クリップボード : OLE クリップボード機構の使用方法
OLE では、クリップボードを使用してデータのコピーに対する既定の書式とある OLE 仕様のフォームを使用します。
、またはアプリケーションからのデータのコピーが切り取りと、データは貼り付け操作で後で使用するクリップボードに格納されます。このデータは、さまざまな形式です。ユーザーがクリップボードからデータを貼り付けることを選択すると、アプリケーションが使用するフォームを選択できます。アプリケーションはユーザーが特定のフォームを明確に頼まなければ、特別な貼り付けを使ったほとんどの情報を提供するフォームを選択するために作成する必要があります。次に、 データ オブジェクトとデータ ソース (OLE) のトピックを確認することもできます。これらは、データ転送の機能、およびアプリケーションで実行する方法かの基本について説明します。
ウィンドウは、クリップボードを使用してデータの転送に使用できるいくつかの標準書式を定義します。これらは、メタファイル、テキスト、ビットマップなどが含まれます。OLE は、多くの OLE 仕様の形式も定義します。これらの既定の書式で指定されているよりも多くの詳細を必要とするアプリケーションの場合、独自のカスタム クリップボード形式を登録することをお勧めします。これを行うには、 Win32 API 関数 RegisterClipboardFormat を使用します。
たとえば、 Microsoft Excel は、スプレッドシートのカスタム書式を登録します。このフォームは、たとえば、ビットマップがよりも多くの情報をやり取りします。このデータがスプレッドシートの形式をサポートするアプリケーションに貼り付けると、スプレッドシートからすべての数式および値が保存され、必要に応じて更新できます。Microsoft Excel では、フォームにクリップボードに OLE アイテムとして貼り付けることができるようにデータを配置します。の OLE コンテナー ドキュメントが埋め込み項目としてこの情報を貼り付けることができます。この埋め込みアイテムは、 Microsoft Excel を使用して変更できます。クリップボードは、スプレッドシートの選択範囲のイメージの単純なビットマップが含まれます。これは、 OLE コンテナー ドキュメントまたは描画のようなビットマップ エディターに貼り付けることができます。ただし、ビットマップの場合は、スプレッドシートとしてデータを処理する方法はありません。
クリップボードから情報の最大サイズを取得するには、アプリケーションでこれらのカスタム書式を持つようにクリップボードからデータを貼り付ける前に確認する必要があります。
たとえば、切り取りコマンドを有効にするために、ハンドラーに次のように書き込む可能性があります:
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();
}