16,548
社区成员




void CopyStrToCliped(CString str)//复制字符串到剪贴板
{
HGLOBAL hClip;//定义一个HGLOBAL句柄变量用来指向分配的内存块
HWND hWnd = AfxGetMainWnd()->GetSafeHwnd();// 获取安全窗口句柄
if (OpenClipboard(hWnd))
{
EmptyClipboard(); //将剪贴板内容清空
hClip = GlobalAlloc(GMEM_MOVEABLE, str.GetLength() + 1);//在堆上分配可移动的内存块,程序返回一个内存句柄
char * buff; //定义指向字符型的指针变量
buff = (char*)GlobalLock(hClip);//对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1
//下面用于在vs2013unicode下,将CString转为char*
USES_CONVERSION;//调用函数,T2A和W2A均支持ATL和MFC中的字符转换
char * pChar = T2A(str);
strcpy_s(buff, strlen(pChar) + 1, pChar);///这里在调试时可以看到字条串内容是正确的。
GlobalUnlock(hClip);//数据写入完毕,进行解锁操作,并将引用计数器数字减1
SetClipboardData(CF_TEXT, hClip);//运行到这里时出错,但如果没有中文,就正常。
CloseClipboard();//关闭剪贴板,释放剪贴板资源的占用权
}
}