[VC2008] 将 文 本 放 置 到 剪 贴 板 中 的 问 题

KaKaKaKa 2010-05-26 04:22:47
不说别的,很短,直接看代码:

if(this->OpenClipboard()) //如果能打开剪贴板
{
::EmptyClipboard(); //清空剪贴板,使该窗口成为剪贴板的拥有者
CString str;
GetDlgItemTextW(IDC_EDIT_SEND,str); //获取发送框中的文本
//下面打算将文本放置到系统剪贴板中
HGLOBAL hClip;
hClip=::GlobalAlloc(GMEM_MOVEABLE,str.GetLength()*2+2); //如果是文本数据,分配内存时必须多分配一个字符
TCHAR *pBuf;
pBuf=(TCHAR *)::GlobalLock(hClip);
lstrcpy(pBuf,str);
::GlobalUnlock(hClip);
::SetClipboardData(CF_TEXT,hClip);
::CloseClipboard();
}


IDE是VS2008,工程采用的是Unicode字符集。

为什么执行完这段之后,剪贴板中只有发送框文本中的第一个字符? 为什么?

哪里有错,请不吝指教,谢谢!
...全文
112 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
KaKaKaKa 2010-05-26
  • 打赏
  • 举报
回复
我也愿意打工啊~ 加下我Q先 fishion
KaKaKaKa 2010-05-26
  • 打赏
  • 举报
回复
哦~ 原来是用CF_UNICODETEXT这个参数,我真大意
不过lstrcpy和wcscpy应该是一样的吧? 没什么区别的 我记得

还是兔子党总支部负责人厉害,我终于可以下班啦

对了,问下,你们兔子党怎么加入的啊?
小弟崇拜你们兔子党多时,不知道怎么加入啊。

小弟QQ:582878145 请党总支部负责人加下我,讨论入党大计

我先下班了 太谢谢了 记得Q我 我也要入党
fishion 2010-05-26
  • 打赏
  • 举报
回复
你可以下班了
fishion 2010-05-26
  • 打赏
  • 举报
回复
//清空剪切板原有数据
if(!EmptyClipboard()) return;
CString str;
GetDlgItem(IDC_EDIT2)->GetWindowText(str);
HANDLE hClip=GlobalAlloc(GMEM_MOVEABLE,(str.GetLength()+1)*2);
WCHAR* pBuf=(WCHAR*)GlobalLock(hClip);
wcscpy(pBuf,str.GetBuffer());
str.ReleaseBuffer();
GlobalUnlock(hClip);
SetClipboardData(CF_UNICODETEXT,hClip);
CloseClipboard();
KaKaKaKa 2010-05-26
  • 打赏
  • 举报
回复
救命啊~
不解决我今天下不了班呐~
KaKaKaKa 2010-05-26
  • 打赏
  • 举报
回复
有VS2008的同仁可以copy进去测试下啊~ 不知道什么原因
KaKaKaKa 2010-05-26
  • 打赏
  • 举报
回复

if(this->OpenClipboard()) //如果能打开剪贴板
{
::EmptyClipboard(); //清空剪贴板,使该窗口成为剪贴板的拥有者
CString str;
GetDlgItemTextW(IDC_EDIT_SEND,str);
HGLOBAL hClip;
hClip=::GlobalAlloc(GMEM_MOVEABLE,(str.GetLength()+1)*2); //如果是文本数据,分配内存时必须多分配一个字符
TCHAR *pBuf;
pBuf=(TCHAR *)::GlobalLock(hClip);
//lstrcpy(pBuf,str);
wcscpy_s(pBuf,str.GetLength()+1,str.GetBuffer()); //改了之后依旧不行呀????
str.ReleaseBuffer();
::GlobalUnlock(hClip);
::SetClipboardData(CF_TEXT,hClip);
::CloseClipboard();
}


兔子党总支部负责人,我改了之后还是不行呀
fishion 2010-05-26
  • 打赏
  • 举报
回复
忘了,我用的是string你可以用
wcscpy_s(pBuf,str.GetLength()+1,str.GetBuffer());
str.ReleaseBuffer();
KaKaKaKa 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fishion 的回复:]
wcscpy_s(pBuf,str.GetLength()+1,str.c_str());
[/Quote]
我这里CString怎么没有c_str()的啊? 是ATL里的么?
我这个项目不包含ATL库的
fishion 2010-05-26
  • 打赏
  • 举报
回复
wcscpy_s(pBuf,str.GetLength()+1,str.c_str());
dinjay 2010-05-26
  • 打赏
  • 举报
回复
wcscpy()

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧