クリップボードへのテキストコピー
先日テキストをクリップボードを貼り付けるのでちょっとハマっていました。クリップボードは、OpenClipboard()でクリップボードを開いてGlobalAlloc()で確保したバッファにデータを設定してEmptyClipboard(); // クリップボードの中身を空にするSetClipboardData(CF_TEXT, ハンドル);CloseClipboard();GlobalFree(hMem);//メモリを解放という手順ですが、確保するバッファサイズがUINICODEの場合は文字列のテキスト文字数×2としておけばいいのですが終端分を+1としてしまいSetCllipBoardData()で怒られてしまいました。正解は、バッファサイズ=(文字数+1)×sizeof(TCHAR);とやっておけば、マルチバイトでもUNICODEでもOKです。(たぶん。。)それと、UNICODEの場合のSetCllipBoardData()の形式指定はCF_UNICODETEXTが正解のようです。(こんなの昔はなかったような気が。。)まあ、最初からマルチバイトに変換しておくのも手ですね。あと、mfcならCEditクラスのクリップボード操作機能を使うのもありかも。。{ CEdit e; CRect r(0,0,0,0); e.Create(0, r, this, 1); e.SetWindowText(text); e.SetSel(0, -1); e.Copy(); e.DestroyWindow();}難は、わざわざウィンドウをCreateしなければならないので親ウィンドウの指定が必要です。場所によっては使いずらいですね。