|
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;
- }
复制代码
|
|