程序截图如下:
主要代码如下:
// 往剪贴板写入数据函数
bool WriteDataToClipboard(CString data)
{
if (::OpenClipboard(AfxGetMainWnd()->m_hWnd))//打开剪贴板
{
//清空剪贴板
EmptyClipboard();
//开辟内存空间
HANDLE hClip=GlobalAlloc(GMEM_MOVEABLE,data.GetLength()+1);
//获取以上所开辟的内存空间的地址,并锁定它
char* pBuf=(char*)GlobalLock(hClip);
//将数据复制到以上所开辟的内存空间中
strcpy(pBuf,data);
//解锁刚才开辟的内存空间
GlobalUnlock(hClip);
//设置复制到剪帖板中的数据的格式
SetClipboardData(CF_TEXT,hClip);
//关闭剪贴板
CloseClipboard();
return true;
}
return false;
}
// 从剪贴板获取数据函数
CString GetDataFromClipboard(CString data)
{
if (OpenClipboard(AfxGetMainWnd()->m_hWnd)) //打开剪贴板
{
if (IsClipboardFormatAvailable(CF_TEXT)) //判断格式是否是文本数据
{
//读取数据
HANDLE hClip=GetClipboardData(CF_TEXT);
char* pBuf=(char*)GlobalLock(hClip);
GlobalUnlock(hClip);
//关闭剪帖板
CloseClipboard();
//返回获取后的数据
CString data="";
data.Format("%s",pBuf);
return data;
}
}
return "NULL";
}
工程是Unicode编码时,请参考以下代码:
来源地址:http://topic.csdn.net/u/20100526/16/be885a28-fca7-48bf-97d2-21751d8f20e8.html?1689013075
//清空剪切板原有数据
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();