无法在 MFC 中使用 SetClipboardData 进行复制粘贴?
Posted
技术标签:
【中文标题】无法在 MFC 中使用 SetClipboardData 进行复制粘贴?【英文标题】:Not able to copypaste using SetClipboardData in MFC? 【发布时间】:2010-04-22 08:16:08 【问题描述】:我正在使用下面的代码来复制粘贴..但它不会复制整个上下文它只是复制几个字母并将其余部分作为垃圾值..如果我使用 char* 来获取数据缓冲区和将项目设置更改为多字节支持...它会工作..但后来我松动以支持 unicode 格式,我也尝试使用 CF_UNICODETEXT,它也不起作用.. 请帮我解决这个问题
void CCopyPAsteDlg::OnBnClickedPaste()
// TODO: Add your control notification handler code here
if (OpenClipboard())
if (::IsClipboardFormatAvailable(CF_TEXT)
|| ::IsClipboardFormatAvailable(CF_OEMTEXT))
HANDLE hClipboardData = GetClipboardData(CF_TEXT);
LPCTSTR pchData = new TCHAR[256];
pchData = (LPCTSTR)GlobalLock(hClipboardData);
CString strFromClipboard = pchData;
m_SetText.SetWindowText(strFromClipboard);
GlobalUnlock(hClipboardData);
else
//AfxMessageBox(L"There is no text (ANSI) data on the Clipboard.");
CloseClipboard();
void CCopyPAsteDlg::OnBnClickedCopy()
// TODO: Add your control notification handler code here
UpdateData();
CString strData;
m_GetText.GetWindowText(strData);
if (OpenClipboard())
EmptyClipboard();
HGLOBAL hClipboardData;
hClipboardData = GlobalAlloc(GMEM_DDESHARE,
strData.GetLength()+1);
LPCTSTR pchData = new TCHAR[256];
pchData = (LPCTSTR)GlobalLock(hClipboardData);
wcscpy((wchar_t*)pchData,strData);
GlobalUnlock(hClipboardData);
SetClipboardData(CF_TEXT,hClipboardData);
CloseClipboard();
【问题讨论】:
【参考方案1】:复制:
HGLOBAL hClipboardData = GlobalAlloc(GMEM_DDESHARE,
(strData.GetLength()+1)*sizeof(TCHAR));
LPCTSTR pchData = (LPCTSTR)GlobalLock(hClipboardData);
...
SetClipboardData(CF_UNICODETEXT,hClipboardData);
粘贴:
HANDLE hClipboardData = GetClipboardData(CF_UNICODETEXT);
LPCTSTR pchData = (LPCTSTR)GlobalLock(hClipboardData);
【讨论】:
我认为应该是sizeof(WCHAR)
,因为CF_UNICODETEXT
。以上是关于无法在 MFC 中使用 SetClipboardData 进行复制粘贴?的主要内容,如果未能解决你的问题,请参考以下文章
无法在 MFC 中使用 SetClipboardData 进行复制粘贴?
错误无法在 Visual Studio 社区 2013 中打开文件“mfc80u.lib”
QuickFIX 和 MFC:无法使用 Initiatior.logon() 函数登录