问题描述
- MFC中如何点击按钮然后复制编辑框中书写的文字。
-
使用了这么一段代码,结果运行的时候如果编辑框中是英文字母,只复制了第一个字母,如果是中文,复制的结果是乱码。求解具体怎么改。谢谢各位void CMFCApplication2Dlg::OnBnClickedButCpy()
{
// TODO: 在此添加控件通知处理程序代码
CString source;
GetDlgItemText(IDC_EDI_TEXT, source);
if (OpenClipboard())
{
HGLOBAL clipbuffer;
char buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength() + 1);
buffer = (char)GlobalLock(clipbuffer);
strcpy(buffer, (const char *)source.GetBuffer());
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT, clipbuffer);
CloseClipboard();
}
}
解决方案
no
hText = GetDlgItem(IDC_EDI_TEXT);
SendMessage(hText, WM_COPY, 0, 0);
解决方案二:
如果就是文本框,不需要那么麻烦,直接先文本框选中文本,往文本框发送wm_copy消息就可以了。
解决方案三:
你的程序的字符串应该被设置 Unicode,在工程属性中将这个设置 修改为多字节 试试。
否则,将 strcpy(buffer, (const char *)source.GetBuffer());
修改为: wcscpy(buffer, (const TCHAR *)source.GetBuffer());
同时将 buffer 的定义也修改为 TCHAR *
解决方案四:
注意要先调用 m_Edit->SetSel()选择一些文本,或者手工在文本框选中一些文本,再执行才有效果
解决方案五:
另外还有类似的消息
wm_undo
wm_redo
wm_paste
wm_cut
分别可以执行标准的撤销 重做 粘贴 剪切
解决方案六:
处理的字符集是unicode才能支持中文
解决方案七:
多查查msdn,找一本《windows编程》(有电子版)先入门下。