VC++下对于剪贴板的操作(实现复制与粘贴)

1.将字符串存放到剪贴板

//将字符串存放到剪贴板
void CMyFun::SetCopy(CString str)
{
	//定义字符型变量用来保存用户输入的数据
	//CString str; 
	HGLOBAL hClip;
	//定义一个HGLOBAL句柄变量用来指向分配的内存块
	if (AfxGetMainWnd()->OpenClipboard())
	{
		EmptyClipboard(); //将剪贴板内容清空
		hClip = GlobalAlloc(GMEM_MOVEABLE, str.GetLength() + 1);
		//在堆上分配可移动的内存块,程序返回一个内存句柄
		char * buff; //定义指向字符型的指针变量
		buff = (char*)GlobalLock(hClip);
		//对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1
		strcpy(buff, str);
		//将用户输入的数据复制到指针变量中,实际上就是复制到分配的内存块中
		GlobalUnlock(hClip);
		//数据写入完毕,进行解锁操作,并将引用计数器数字减1
		SetClipboardData(CF_TEXT, hClip);
		//将存放有数据的内存块放入剪贴板的资源管理中
		CloseClipboard();
		//关闭剪贴板,释放剪贴板资源的占用权
		//MessageBox("已将数据存入剪贴板");
	}

}

2.从剪贴板中取出文本:

//从剪贴板中取出文本:
CString CMyFun::GetCopy()
{
	CString str;
	//字符型变量保存由剪贴板复制下来的数据
	HANDLE hClip;
	//定义HANDLE句柄型变量用来指向GetClipboardData函数返回的句柄
	if (AfxGetMainWnd()->OpenClipboard())
	{
		hClip = GetClipboardData(CF_TEXT);
		//从剪贴板中取出一个内存的句柄
		char* buff;
		//定义字符型指针变量用来保存内存块中的数据
		buff = (char*)GlobalLock(hClip);
		//对内存块进行加锁,将内存句柄值转化为一个指针,并将内存块的引用计数器加一,内存中的数据也返回到指针型变量中
		str = buff;
		//将数据保存到字符型变量中
		GlobalUnlock(hClip);
		//将内存块的引用计数器减一
		CloseClipboard();
		//关闭剪贴板,释放剪贴板资源的占用权

	}

	return str;
}

你可能感兴趣的:(VC,MFC,c++,开发语言,后端)