我是这个代码的基本代码,在我的另一个问题中也提到过.该版本强制使用字符类型char*,这会破坏我的unicode项目的编译.所以我做了以下调整:
void SetClipboardText(CString & szData)
{
HGLOBAL h;
LPTSTR arr;
size_t bytes = (szData.GetLength()+1)*sizeof(TCHAR);
h=GlobalAlloc(GMEM_MOVEABLE, bytes);
arr=(LPTSTR)GlobalLock(h);
ZeroMemory(arr,bytes);
_tcscpy_s(arr, szData.GetLength()+1, szData);
szData.ReleaseBuffer();
GlobalUnlock(h);
::OpenClipboard (NULL);
EmptyClipboard();
SetClipboardData(CF_TEXT, h);
CloseClipboard();
}
Run Code Online (Sandbox Code Playgroud)
复制看起来很好 - 在调试器中运行Visual Studio告诉我arr按预期包含复制的字符串.但是当我粘贴到任何应用程序时,只粘贴第一个字符.
出了什么问题?
先前问题评论中的Unicode评论是有说服力的.如果您有一个带有低ASCII字符的宽字符串,则在UTF-16中,它将被编码为低ASCII字节,后跟NULL. 使用CF_UNICODETEXT而不是CF_TEXT.
| 归档时间: |
|
| 查看次数: |
1756 次 |
| 最近记录: |