剪贴板的使用(对字符)

Posted mktest123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剪贴板的使用(对字符)相关的知识,希望对你有一定的参考价值。

实现“复制”功能:

 1 void C剪贴板Dlg::OnBnClickedButton1()
 2 {
 3     if (!OpenClipboard()) return;
 4     if (!EmptyClipboard()) {
 5         CloseClipboard();
 6         return;
 7     }
 8     //拷贝之前的准备工作
 9     CString szStr = _T("Hello,World!");
10     int cbStr = (szStr.GetLength() + 1) * sizeof(TCHAR);//获得字符串总长度
11     HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr);//申请内存空间
12     memcpy_s(GlobalLock(hData), cbStr, szStr.LockBuffer(), cbStr);//锁定内存空间和字符串并拷贝字符串到申请的内存地址
13     GlobalUnlock(hData);//解锁内存空间锁定
14     szStr.UnlockBuffer();//解锁字符串锁定
15 
16     UINT uiFormat = (sizeof(TCHAR) == sizeof(WCHAR))?CF_UNICODETEXT:CF_TEXT;
17     if (::SetClipboardData(uiFormat, hData) == NULL) {
18         MessageBox(_T("设置剪贴板数据失败"));
19         CloseClipboard();
20         return;
21     }
22     CloseClipboard();
23     MessageBox(_T("设置剪贴板数据成功"));
24 }

实现“粘贴”功能:

 1 void C剪贴板Dlg::OnBnClickedButton2()
 2 {
 3     UINT uiFormat = (sizeof(TCHAR) == sizeof(WCHAR)) ? CF_UNICODETEXT : CF_TEXT;
 4     if (!IsClipboardFormatAvailable(uiFormat)) return;//格式是否判断正确
 5     if (!OpenClipboard()) return;
 6 
 7     HANDLE hGlobal = GetClipboardData(uiFormat);//获得剪贴板数据
 8     if (hGlobal) {
 9         LPTSTR lptstr = (LPTSTR)GlobalLock(hGlobal);//锁定剪贴板数据
10         if (lptstr) {
11             SetDlgItemText(IDC_EDIT1, lptstr);
12             GlobalUnlock(hGlobal);//解锁剪贴板数据锁定
13         }
14     }
15     CloseClipboard();
16 }

以上是关于剪贴板的使用(对字符)的主要内容,如果未能解决你的问题,请参考以下文章

GetClipboardData()仅返回剪贴板数据的第一个字符

将字符串复制到剪贴板,而不使用 DOM 元素?

将字符串复制到剪贴板

输入带有 8 位十六进制代码的 Unicode 字符

手机剪贴板经常出现奇怪的口令

如何将字符串复制到剪贴板?