[CPP]
■クリップボード
以下のコードで、クリップボードへテキストをコピーします。
●ワイド文字の場合
一旦、WideCharToMultiByte関数を使ってマルチバイト文字(OEM)に変換する必要がある。
ワイド文字のままクリップボードにコピーしても、ペースト時に、マルチバイト文字扱いを受けるため、
ワイド文字の2バイト目が0x00だったら、終端文字扱いを受けてしまい、最初の1文字しか表示されない。
// convert wide chars into multi-byte chars CByteArray baMultiString; int nWideLength = strText.GetLength() + 1; int nMultiLength = WideCharToMultiByte(CP_ACP, NULL, strText.GetBuffer(), nWideLength, NULL, NULL, NULL, NULL); baMultiString.SetSize(nMultiLength); WideCharToMultiByte(CP_ACP, NULL, strText.GetBuffer(), nWideLength, (char *)baMultiString.GetData(), nMultiLength, NULL, NULL); // copy into clipboard OpenClipboard(); EmptyClipboard(); HGLOBAL hGlob = GlobalAlloc(GMEM_FIXED, nMultiLength); memcpy(hGlob, baMultiString.GetData(), nMultiLength); ::EmptyClipboard(); ::SetClipboardData(CF_TEXT, hGlob); CloseClipboard();
ネタ元