クリップボード : データのコピーと貼り付け
更新 : 2007 年 11 月
クリップボードを使用したコピーと貼り付けを OLE アプリケーションで実装するために必要な最低限の作業について説明します。先に進む前に、「データ オブジェクトとデータ ソース (OLE)」の一連のトピックを読むことをお勧めします。
コピーまたは貼り付けを実装する前に、[編集] メニューの [コピー]、[切り取り]、および [貼り付け] の各コマンドを処理する関数を作成する必要があります。
データのコピーまたは切り取り
クリップボードにデータをコピーするには
コピーするデータがネイティブ データであるか、埋め込みアイテムやリンク アイテムであるかを調べます。
データが埋め込みアイテムまたはリンク アイテムの場合は、選択されている COleClientItem オブジェクトへのポインタを取得します。
データがネイティブで、アプリケーションがサーバーの場合は、選択したデータを格納している COleServerItem の派生させたオブジェクトを作成します。それ以外の場合は、データ用の COleDataSource オブジェクトを作成します。
選択されたアイテムの CopyToClipboard メンバ関数を呼び出します。
[コピー] ではなく [切り取り] が選択されたときは、選択されたデータをアプリケーションから削除します。
この手順のコード例については、MFC OLE のサンプル プログラム OCLIENT と HIERSVR の OnEditCut 関数と OnEditCopy 関数を参照してください。これらのサンプル プログラムでは、選択されているデータへのポインタが保持されているため、手順 1 に相当する部分は不要です。
データの貼り付け
データの貼り付けは、アプリケーションにデータを貼り付けるデータ形式を選択する必要があるため、コピーよりも複雑です。
クリップボードのデータを貼り付けるには
ビュー クラスに OnEditPaste 関数を実装します。この関数は、[編集] メニューの [貼り付け] が選択されると実行されます。
OnEditPaste 関数で、COleDataObject オブジェクトを作成し、AttachClipboard メンバ関数を呼び出して、オブジェクトをクリップボードのデータにリンクします。
COleDataObject::IsDataAvailable 関数を呼び出して、目的のデータ形式が利用可能かどうかを確認します。
または、COleDataObject::BeginEnumFormats 関数で、アプリケーションに最も適したほかのデータ形式を検索します。
得られたデータ形式で貼り付けを実行します。
この操作の例については、MFC OLE のサンプル プログラム OCLIENT と HIERSVR で定義されるビュー クラスの、OnEditPaste メンバ関数の実装を参照してください。
ヒント : |
---|
貼り付け操作をそれぞれの関数に分割する利点は、ドラッグ アンド ドロップ操作でアプリケーションにデータがドロップされるときにも、貼り付けの同じコードを使用できることです。OCLIENT および HIERSVR の場合と同様に、OnDrop 関数で DoPasteItem 関数を呼び出して、[貼り付け] の操作を実装したコードを再利用することもできます。 |
[編集] メニューの [形式を選択して貼り付け] コマンドについては、「OLE のダイアログ ボックス」を参照してください。