VC(MFC) クリップボード へ テキスト設定

  • デル株式会社
  • クリップボード へ テキスト設定

    VCでテキストをクリップボードへコピーする。
    必要に迫られて作成したので、記載。
    (MSのサンプルほぼそのまんまなんだけど。)

    参考サイト:CWnd::OpenClipboard

    こんなにバチっとサンプルあったら、考えなくなるよなぁ。。



    ソース

    こんな画面を作成し、ボタンを押したらコピーされます。

    ソース

    
    //**********************************
    //実行結果には、責任取りません。
    //使用時は自己責任でお願いします。
    //**********************************
    
    // ボタンクリックイベント
    void CClipboardTextDlg::OnBnClickedButton1()
    {
    	
    	CString sText;
    	
    	// クリップボードへコピーするテキスト
    	sText = _T("クリップボードへコピー");
    
    	// クリップボードオープン
    	if ( OpenClipboard() == FALSE )
    	{
    		MessageBox( _T("失敗。他のアプリケーションが開いてる"),
    			    _T("失敗"), 
    			    MB_ICONWARNING );
    		return;
    	}
    
    	// クリップボードクリアと所有権の割り当て
    	if ( EmptyClipboard() == FALSE )
    	{
    		MessageBox( _T("なんか失敗"),
    			    _T("失敗"),
    			    MB_ICONWARNING );
    		return;
    	}
    	
    	// サイズ取得
    	size_t cbStr = ( sText.GetLength() + 1) * sizeof( TCHAR );
    	
    	// ヒープ割り当て
    	HGLOBAL hData = GlobalAlloc( GMEM_MOVEABLE, cbStr );
    	
    	// 割り当てたメモリのロックとテキストのコピー
    	memcpy_s( GlobalLock(hData), cbStr, sText.LockBuffer(), cbStr );
    	
    	GlobalUnlock( hData );
    	
    	sText.UnlockBuffer();
    
    	// 文字セットがユニコードなら CF_UNICODETEXT
    	// 文字セットがマルチバイトなら CF_TEXT
    	UINT uiFormat = (sizeof(TCHAR) == sizeof(WCHAR)) ? CF_UNICODETEXT : CF_TEXT;
    
    	// クリップボードへ設定
    	if ( ::SetClipboardData(uiFormat, hData) == NULL )
    	{
    		MessageBox( _T("クリップボードへ設定失敗"),
    			    _T("失敗"),
    			    MB_ICONWARNING);
    		
    		CloseClipboard();
    
    		return;
    	}
    
    	CloseClipboard();
    
    	MessageBox( _T("クリップボードへテキストを設定しました。"),
    	            _T("成功"),
    		    MB_ICONINFORMATION );
    }
    
    

    成功のメッセージでたら、CTRL + V で貼り付けられます。

    関連記事

    ページ上部へ戻る