次の方法で共有


クリップボード : Windows クリップボードの使用方法

MFC アプリケーションで Windows 標準クリップボード API を使用する方法について説明します。

多くの Windows 用アプリケーションでは、Windows クリップボードへのデータの切り取りまたはコピー、およびクリップボードからのデータの貼り付けをサポートしています。 クリップボードのデータ形式は、アプリケーションによって異なります。 フレームワークでは、一部のクラスに対しての数種類のクリップボード形式だけがサポートされています。 通常は、[切り取り]、[コピー]、[貼り付け] など、クリップボード関連のコマンドをビューの [編集] メニューに実装します。 クラス ライブラリでは、これらのコマンドのコマンド Id を定義します。ID_EDIT_CUTID_EDIT_COPY、および ID_EDIT_PASTE。 また、それぞれのメッセージ行プロンプトも定義されています。

フレームワークのメッセージとコマンド」では、メニュー コマンドをハンドラー関数に割り当て、アプリケーションでメニュー コマンドを処理する方法について説明します。 アプリケーションの [編集] メニューのクリップボード コマンドのハンドラー関数を定義しない限り、クリップボード コマンドは無効のままです。 [切り取り] および [コピー] コマンドのハンドラー関数を作成する場合は、アプリケーションにデータを選択する機能を実装してください。 [貼り付け] コマンドのハンドラー関数を作成する場合は、クリップボードに問い合わせて、格納されているデータがアプリケーションで処理可能な形式かどうかを調べる必要があります。 たとえば、[コピー] コマンドを有効にするには、次のようなハンドラーを記述します。

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

[切り取り]、[コピー]、および [貼り付け] コマンドは、特定のコンテキストでだけ意味を持ちます。 [切り取り] および [コピー] コマンドは、データが選択されている場合にだけ有効になります。[貼り付け] コマンドは、データがクリップボードにある場合にだけ有効になります。 このような動作を実現するには、コンテキストに応じてコマンドを有効または無効にする更新ハンドラー関数を定義します。 詳細については、「ユーザー インターフェイス オブジェクトの更新方法」を参照してください。

Microsoft Foundation Class ライブラリは、CEdit クラスおよび CEditView クラスによるテキスト編集用にクリップボード機能をサポートしています。 また、OLE クラスでは、OLE アイテムを扱うクリップボード操作を簡単に実装できます。 OLE クラスの詳細についてを参照してくださいクリップボード:OLE クリップボード機構を使用して

ほかの [編集] メニュー コマンド、たとえば [元に戻す] (ID_EDIT_UNDO)、[やり直し] (ID_EDIT_REDO) などは自由に実装できます。 アプリケーションがこれらのコマンドをサポートしない場合は、Visual C++ のリソース エディターを使用してリソース ファイルから簡単に削除できます。

さらに詳しくは次のトピックをクリックしてください

参照

概念

クリップボードのトピック