Windowsクリップボードの操作が簡単な例


1、文字をクリップボードにコピーする
CString strText = L"           ";
if ( ::OpenClipboard(m_hWnd) )
{
	if ( ::EmptyClipboard() )//        
	{
		int nSize = strText.GetLength()*2+1;//      ,UNICODE       2   ,      \0   .
		HGLOBAL hMem = ::GlobalAlloc(GHND, nSize);	
		byte* pData=(byte*)::GlobalLock(hMem);
		memcpy_s(pData, nSize, strData.GetData(), nSize-1);
		pData[nSize-1]='\0';
		::GlobalUnlock(hMem);
		::SetClipboardData(CF_UNICODETEXT, hMem);
		::CloseClipboard();
		::GlobalFree(hMem);
	}
}

2、ビットマップハンドルをクリップボードにコピーする
//            
if( ::OpenClipboard(m_hWnd) )
{
	if( ::EmptyClipboard() )
	{
		HBITMAP hBmp = GetBitmapRect(g_hScreenBmp, m_rect);
		::SetClipboardData(CF_BITMAP, hBmp);
		DeleteObject(hBmp);
		::CloseClipboard();
	}
}
3、総じて言えば、クリップボード:open----empty----setdata----closeをこの順序で操作する必要があります.(開く→空にする→設定→閉じる)
詳細パラメータの説明はMSDNの説明を参照してください
Remarks

OpenClipboard fails if another window has the clipboard open. 

An application should call the CloseClipboard function after every successful call to OpenClipboard. 

The window identified by the hWndNewOwner parameter does not become the clipboard owner unless the EmptyClipboard function is called. 

If an application calls OpenClipboard with hwnd set to NULL, EmptyClipboard sets the clipboard owner to NULL; this causes SetClipboardData to fail.