|
VC++MFC 将字符串存放到剪贴板+从剪贴板中取出文本
MFC 将字符串存放到剪贴板
ClipboardUtil.cpp:
- BOOL CopyToClipboard(const CString& strText) {
- if (!OpenClipboard(AfxGetMainWnd()->GetSafeHwnd()))
- return FALSE;
- EmptyClipboard();
- HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (strText.GetLength() + 1) * sizeof(TCHAR));
- if (!hMem) {
- CloseClipboard();
- return FALSE;
- }
- LPTSTR pBuffer = (LPTSTR)GlobalLock(hMem);
- _tcscpy_s(pBuffer, strText.GetLength() + 1, strText.GetString());
- GlobalUnlock(hMem);
- UINT format = sizeof(TCHAR) == 1 ? CF_TEXT : CF_UNICODETEXT;
- SetClipboardData(format, hMem);
- CloseClipboard();
- return TRUE;
- }
复制代码 MFC从剪贴板中取出文本:
ClipboardUtils.cpp:
- BOOL GetTextFromClipboard(CString& strOut) {
- if (!OpenClipboard(AfxGetMainWnd()->GetSafeHwnd()))
- return FALSE;
- UINT format = IsClipboardFormatAvailable(CF_UNICODETEXT) ?
- CF_UNICODETEXT : CF_TEXT;
- HGLOBAL hMem = GetClipboardData(format);
- if (!hMem) {
- CloseClipboard();
- return FALSE;
- }
- LPTSTR pText = (LPTSTR)GlobalLock(hMem);
- strOut = pText; // 自动处理ANSI/UNICODE转换
- GlobalUnlock(hMem);
- CloseClipboard();
- return TRUE;
- }
复制代码 :通过按钮触发复制/粘贴操作,包含错误处理提示。复制时自动处理UNICODE/ANSI转换,粘贴时自动检测剪贴板格式
- // 在对话框类中实现按钮点击事件
- void CClipboardDemoDlg::OnBnClickedCopyButton()
- {
- CString strSource = L"这是要复制的UNICODE文本";
- if(!CopyToClipboard(strSource)) {
- AfxMessageBox(L"复制到剪贴板失败");
- }
- }
- void CClipboardDemoDlg::OnBnClickedPasteButton()
- {
- CString strResult;
- if(GetTextFromClipboard(strResult)) {
- GetDlgItem(IDC_EDIT_RESULT)->SetWindowText(strResult);
- } else {
- AfxMessageBox(L"剪贴板无文本数据");
- }
- }
复制代码
|
|