不说别的,很短,直接看代码: 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字符集。为什么执行完这段之后,剪贴板中只有发送框文本中的第一个字符? 为什么?哪里有错,请不吝指教,谢谢!
{
::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字符集。为什么执行完这段之后,剪贴板中只有发送框文本中的第一个字符? 为什么?哪里有错,请不吝指教,谢谢!
我这个项目不包含ATL库的
wcscpy_s(pBuf,str.GetLength()+1,str.GetBuffer());
str.ReleaseBuffer();
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();
}
兔子党总支部负责人,我改了之后还是不行呀
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();