1. 申请内存
m_hClip=GlobalAlloc(GMEM_MOVEABLE, 256);
if(m_hClip == NULL)
{
AfxMessageBox(_T("m_hClip == NULL"));
}
2. 使用代码
void HHZWWG::CopyToClipBoard(CString str)
{
if(m_hParentWnd == NULL)
{
return;
}
//定义一个HGLOBAL句柄变量用来指向分配的内存块
if (OpenClipboard(m_hParentWnd))
{
EmptyClipboard(); //将剪贴板内容清空
m_hClip=GlobalAlloc(GMEM_MOVEABLE, 2*(str.GetLength()+1));
//在堆上分配可移动的内存块,程序返回一个内存句柄
wchar_t * buff; //定义指向字符型的指针变量
buff=(wchar_t*)GlobalLock(m_hClip);
//对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1
wcscpy(buff, str);
//将用户输入的数据复制到指针变量中,实际上就是复制到分配的内存块中
GlobalUnlock(m_hClip);
//数据写入完毕,进行解锁操作,并将引用计数器数字减1
SetClipboardData(CF_UNICODETEXT,m_hClip);
//将存放有数据的内存块放入剪贴板的资源管理中
CloseClipboard();
//关闭剪贴板,释放剪贴板资源的占用权
// MessageBox("已将数据存入剪贴板");
}
}
CString HHZWWG::PasteFromClipBoard()
{
CString str;
//字符型变量保存由剪贴板复制下来的数据
HANDLE hClip;
if(m_hParentWnd == NULL)
{
return NULL;
}
//定义HANDLE句柄型变量用来指向GetClipboardData函数返回的句柄
if (OpenClipboard(m_hParentWnd))
{
hClip=GetClipboardData(CF_UNICODETEXT);
//从剪贴板中取出一个内存的句柄
wchar_t* buff;
//定义字符型指针变量用来保存内存块中的数据
buff=(wchar_t*)GlobalLock(hClip);
//对内存块进行加锁,将内存句柄值转化为一个指针,并将内存块的引用计数器加一,内存中的数据也返回到指针型变量中
str=buff;
//将数据保存到字符型变量中
GlobalUnlock(hClip);
//将内存块的引用计数器减一
CloseClipboard();
//关闭剪贴板,释放剪贴板资源的占用权
}
return str;
}
3. release handle.
GlobalFree(m_hClip);