Last Updated 2005/02/09
Programming Tips Windows クリップボード  索 引 
クリップボードを使う
2005/02/09

クリップボードのテキストデータを取得する.
クリップボードにアクセスする前にテキストデータが入っているかどうか確認するとよい.確認は IsClipboardFormatAvailable() を使用する.

クリップボードからテキストデータを取得するには以下の様にする.

  hData = ::GetClipboardData(CF_TEXT);
  const char* pszData = (const char*)::GlobalLock(hData);
  CString s300( pszData );
  ::GlobalUnlock( hData );
  ::CloseClipboard();
  pDC->TextOut(200, 130, s300);


逆にクリップボードへコピーする場合はちゃんとメモリを確保してやる必要がある.(GlobalAlloc() で確保,GlobalLock() で使用)
(解放は GlobalFree() と GlobalUnlock())
(クリップボードから取得する時にはメモリブロックはクリップボードが持っているので GlobalAlloc() などが必要ない)
相手がクリップボードということになれば,メモリを確保してクリップボードに転送すれば,メモリブロックはクリップボードのものとなるから GlobalFree() は必要ない.
(GlobalAlloc() を使用して割り当てたメモリは SetClipboardData() を呼び出したあとハンドルを触ってはいけない)
(クリップボードに転送できなかった場合は GlobalFree() が必要になる)
まとめると以下のようになる.

  CString s300("テスト");

  // メモリブロックを用意
  HGLOBAL hData2 = GlobalAlloc(GHND, s300.GetLength() + 1);
  char* pszData2 = (char*)GlobalLock(hData2);
  strcpy(pszData2, s300);
  GlobalUnlock(hData2);

  // クリップボードに設定
  OpenClipboard();
  EmptyClipboard();
  SetClipboardData(CF_TEXT, hData2);
  CloseClipboard();


GlobalAlloc() する場合,GHND | GMEM_DDESHARE の方がよい(かもしれない)


参照
ビットマップをクリップボードに転送
クリップボードのリッチテキスト
前後のTips
クリップボードを使う

DSS ProgrammingTipsCGI Ver2.02