- 2021-6-17
- Visual C++
クリップボード へ テキスト設定
VCでテキストをクリップボードへコピーする。
必要に迫られて作成したので、記載。
(MSのサンプルほぼそのまんまなんだけど。)
こんなにバチっとサンプルあったら、考えなくなるよなぁ。。
ソース
こんな画面を作成し、ボタンを押したらコピーされます。
ソース
//**********************************
//実行結果には、責任取りません。
//使用時は自己責任でお願いします。
//**********************************
// ボタンクリックイベント
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 で貼り付けられます。









