目录
一、MFC使用
1、将字符串复制到剪贴板中
2、获得剪贴板中字符串
二、整理封装如下:
1、复制
2、粘贴
一、MFC使用
1、将字符串复制到剪贴板中
使用OnCopy() 响应复制操作:
将字符串nStr复制到剪切板中
//剪切板操作if(!OpenClipboard()){AfxMessageBox(L"不能打开剪贴板!");return;}if(!EmptyClipboard()){AfxMessageBox(L"不能清空剪贴板!");CloseClipboard();return;}HGLOBAL hGlobal;LPTSTR pGlobal;//分配全局空间hGlobal=GlobalAlloc(GMEM_DDESHARE,nStr.GetLength()*2+2);pGlobal=(LPTSTR)GlobalLock(hGlobal);//为空间赋值lstrcpy(pGlobal,nStr);GlobalUnlock(hGlobal);//将内存hGlobal上的数据按一定格式复制到剪切板中if(!SetClipboardData(CF_UNICODETEXT,hGlobal)){AfxMessageBox(L"不能复制到剪贴板!");}CloseClipboard();
2、获得剪贴板中字符串
使用OnPaste() 进行粘贴:
将剪切板中的数据复制到字符串中
HANDLE hGlobal;wchar_t* pGlobal;if(!OpenClipboard()){AfxMessageBox(L"不能打开剪贴板!");return;}if(!(hGlobal=GetClipboardData(CF_UNICODETEXT))){AfxMessageBox(L"不能获取剪贴板数据!");CloseClipboard();return;}pGlobal=(wchar_t*)GlobalLock(hGlobal);GlobalUnlock(hGlobal);CloseClipboard();CString nStr=pGlobal;
二、整理封装如下:
1、复制
void CopyToClipboard(std::wstring nStr){if (!OpenClipboard(nullptr)){//AfxMessageBox(L"不能打开剪贴板!");return ;}if (!EmptyClipboard()){//AfxMessageBox(L"不能清空剪贴板!");CloseClipboard();return ;}HGLOBAL hGlobal;LPTSTR pGlobal;int nLen = nStr.length() + 1;//分配全局空间hGlobal = GlobalAlloc(GMEM_DDESHARE, nLen * 2);pGlobal = (LPTSTR)GlobalLock(hGlobal);//为空间赋值lstrcpy(pGlobal, nStr.c_str());GlobalUnlock(hGlobal);//将内存hGlobal上的数据按一定格式复制到剪切板中if (!SetClipboardData(CF_UNICODETEXT, hGlobal)){//AfxMessageBox(L"不能复制到剪贴板!");}CloseClipboard();}
2、粘贴
std::wstring GetStrFromClipBoard(){HANDLE hGlobal;wchar_t* pGlobal;if (!OpenClipboard(nullptr)){return L"";}if (!(hGlobal = GetClipboardData(CF_UNICODETEXT))){CloseClipboard();return L"";}pGlobal = (wchar_t*)GlobalLock(hGlobal);GlobalUnlock(hGlobal);CloseClipboard();std::wstring nStr = pGlobal;return nStr;}
参考资料:
WINDOWS 剪切板操作_scuabin的博客-CSDN博客
如流,新一代智能工作平台
剪切板操作SetClipboardData GetClipboardData_ycc89的博客-CSDN博客_setclipboarddata
SetClipboardData function (winuser.h) - Win32 apps | Microsoft Docs
C++内存分配秘籍—new,malloc,GlobalAlloc详解 - gaochaooo - 博客园