クリップボード転送時に尻切れになったのはNULL文字を忘れていたから
確保する領域のサイズに+1
を忘れていた。うまくいったように見えた場合があったのは、\r\n
があったから。
/*-------------------------------------------------------------- クリップボードに文字列を設定 required: windows.h --------------------------------------------------------------*/ bool SetTextToClipbord(LPCTSTR str) { LPTSTR mem; HGLOBAL hg = GlobalAlloc(GHND | GMEM_SHARE, strlen(str)+1); // グローバルな領域を確保 mem = (LPTSTR)GlobalLock(hg); // 領域を一時固定しアドレスを取得 lstrcpy(mem, str); // 文字列を転写 GlobalUnlock(hg); // 領域の固定を解除 if(!OpenClipboard(NULL)) return false; // クリップボードを開く EmptyClipboard(); // クリップボードの中身を空に SetClipboardData(CF_TEXT, hg); // クリップボードに設定 CloseClipboard(); // クリップボードを閉じる return true; }