现在的情况是:
---------我拷贝这里的文字,就像我现在打的这些字,(即网上的文字)然后复制到 1.VC6里,中文不是乱码。2. 文本文件里,中文是乱码。3. word文档里,中文是乱码。
*********我拷贝了VC6里面的中文,然后复制到 1.这里,是乱码, 2. 文本文件里,是乱码。
3. word里,是乱码。
—————我拷贝了文本文件里的中文,复制到 1. 这里,不是乱码 2.VC6里是???乱码
3. word里,不是乱码。
************这里是重点要问的**********************我的控件里的文字,(我是将剪贴板里的内容显示到了控件里)
1. 从剪贴板到控件 如果我是从文本文件中文拷贝的话,控件里显示是乱码,如果是网上或者VC6里或者word文档则不是乱码
问题一:如何将文本里的中文也正确显示出来?
2. 我将控件里的内容要想正确的显示在以上说过的所有的里面,应该怎么办?
我的代码是这样的。
***********************得到数据***********************************
TCHAR *buffer = NULL;
CString ret;
HANDLE hData; if(OpenClipboard())
{
if(IsClipboardFormatAvailable(CF_TEXT))
{
hData = GetClipboardData(CF_TEXT);
buffer = (TCHAR*)GlobalLock(hData);
if(buffer == NULL)
return "";
ret = buffer;
GlobalUnlock(hData);
}
CloseClipboard();
}
************************************写入数据**************************
if(OpenClipboard())
{
HGLOBAL clipbuffer;
TCHAR *buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, strtoWrite.GetLength()+1);
buffer = (TCHAR*)GlobalLock(clipbuffer);
lstrcpy(buffer,LPCSTR(strtoWrite));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
---------我拷贝这里的文字,就像我现在打的这些字,(即网上的文字)然后复制到 1.VC6里,中文不是乱码。2. 文本文件里,中文是乱码。3. word文档里,中文是乱码。
*********我拷贝了VC6里面的中文,然后复制到 1.这里,是乱码, 2. 文本文件里,是乱码。
3. word里,是乱码。
—————我拷贝了文本文件里的中文,复制到 1. 这里,不是乱码 2.VC6里是???乱码
3. word里,不是乱码。
************这里是重点要问的**********************我的控件里的文字,(我是将剪贴板里的内容显示到了控件里)
1. 从剪贴板到控件 如果我是从文本文件中文拷贝的话,控件里显示是乱码,如果是网上或者VC6里或者word文档则不是乱码
问题一:如何将文本里的中文也正确显示出来?
2. 我将控件里的内容要想正确的显示在以上说过的所有的里面,应该怎么办?
我的代码是这样的。
***********************得到数据***********************************
TCHAR *buffer = NULL;
CString ret;
HANDLE hData; if(OpenClipboard())
{
if(IsClipboardFormatAvailable(CF_TEXT))
{
hData = GetClipboardData(CF_TEXT);
buffer = (TCHAR*)GlobalLock(hData);
if(buffer == NULL)
return "";
ret = buffer;
GlobalUnlock(hData);
}
CloseClipboard();
}
************************************写入数据**************************
if(OpenClipboard())
{
HGLOBAL clipbuffer;
TCHAR *buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, strtoWrite.GetLength()+1);
buffer = (TCHAR*)GlobalLock(clipbuffer);
lstrcpy(buffer,LPCSTR(strtoWrite));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
那是不是和我使用的IE有关呢?我用的是Maxthon英文版(就是以前的Myie2)
那我试下MS 的IE先,呵呵~
1。控件上的显示问题:控件上惟独不能正确显示来自文本文件的中文。
比如:我ctrl+c了文本文件中的中文。控件上显示的是乱码。来自其他文件的中文都可以正常显示。
2。控件写向剪贴板问题:
在上面正常显示的基础上,把控件上的内容,通过一个按钮写入剪贴板,然后ctrl+v,可是结果是:如果控件上文字来源是:
a:文本:不用说,本身就是乱码,ctrl+v后还是乱码。
b:VC6:除了向本身ctrl+v以外,全是乱码。
c:网上:除了VC6可以正常显示外,其他全是乱码。
d:word文档:除了VC6可以正常显示外,其他全是乱码。
**********************************************************************
由此可见,问题是出在了向剪贴板中写的过程,那么 应该怎么改呢,大家帮忙看下~ 谢谢
是啊,所以我想知道如何使用unicode呀,帮忙改下程序好吗?谢谢
你在采集数据的时候就需要把采集到的数据进行一次转换.如果是单字节的就要转换成双字节
具体的你再问问别人吧.
加上这个标记后,所有以前的都得用unicode了,开始没有错,现在一下子出现了27个错误,看来得改下了。像MessageBoxA改成MessageBoxW,呵呵,谢谢了~试下先。
--
不用的.messagebox本身就是一个宏的.可以根据选择的unicode来选择用A还是用W,
最好是你的有关字符串操作都用CString.不要用char或wchar_t.而用TCHAR,这也是一个宏.good luck
哦,这样啊,好的,谢谢~
刚试了下,不过不改的话好象不行哦,比如:
MessageBox(NULL,"","",MB_OK);
就得改成MessageBox(NULL,L"",L"",MB_OK);
还有就是全用CString的话,象下边这个典型的代码:CString source;//文本内容保存在source变量中
if(OpenClipboard())
{
HGLOBAL clipbuffer;
char * buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, dource.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);//这里buffer也要改成CString 吗?
lstrcpy(buffer, LPCSTR(source));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
我查了没有,难道我的环境中这个文件丢失了??
dll就拷贝到system下MessageBox(NULL,"","",MB_OK);
就得改成MessageBox(NULL,L"",L"",MB_OK);
--
也可以改成
MessageBox(NULL,_T(""),_T(""),MB_OK);
if(OpenClipboard())
{
HGLOBAL clipbuffer;
char * buffer;
--
>>TCHAR * buffer;EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, dource.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);//这里buffer也要改成CString 吗?
--
你可以用LPCSTR来转换(?应该是这个的,我很久不做VC开发了.),一样的道理.反正你编程的时候尽量用unicode的方式.
具体的函数可以看看tchar.h的文件,
lstrcpy(buffer, LPCSTR(source));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}