现在的情况是:
---------我拷贝这里的文字,就像我现在打的这些字,(即网上的文字)然后复制到 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.   

    我从网上复制的(就这里),粘到文本文件中不是乱码啊!?网页里有个encode, 文本文件里有可以选编码方式, word也一样,和操作系统(字符集)与有一定的关系!!
      

  2.   

    就是说,保证在我控件里得到的字符不要显示乱码(控件的字符是从剪贴板得到的)然后,从控件里往剪贴板里写时也不要是乱码(因接下来要Ctrl+V,粘贴的结果不能是乱码)TO:pursuerbb(小墨子)
    那是不是和我使用的IE有关呢?我用的是Maxthon英文版(就是以前的Myie2)
    那我试下MS 的IE先,呵呵~
      

  3.   

    MS的IE还是不行啊,现在的问题是
    1。控件上的显示问题:控件上惟独不能正确显示来自文本文件的中文。
       比如:我ctrl+c了文本文件中的中文。控件上显示的是乱码。来自其他文件的中文都可以正常显示。
    2。控件写向剪贴板问题:
       在上面正常显示的基础上,把控件上的内容,通过一个按钮写入剪贴板,然后ctrl+v,可是结果是:如果控件上文字来源是:
    a:文本:不用说,本身就是乱码,ctrl+v后还是乱码。
    b:VC6:除了向本身ctrl+v以外,全是乱码。
    c:网上:除了VC6可以正常显示外,其他全是乱码。
    d:word文档:除了VC6可以正常显示外,其他全是乱码。
    **********************************************************************
    由此可见,问题是出在了向剪贴板中写的过程,那么 应该怎么改呢,大家帮忙看下~ 谢谢
      

  4.   

    TO:9731boy(发呆的上帝)
    是啊,所以我想知道如何使用unicode呀,帮忙改下程序好吗?谢谢
      

  5.   

    在vs menu->projects->setting->C/C++->Preprocessor definitions加入一个_UNCIDOE这样就是unicode编程了
    你在采集数据的时候就需要把采集到的数据进行一次转换.如果是单字节的就要转换成双字节
      

  6.   

    嗯.我也没有做过剪贴板的编程.我也不知道里面的数据会不会是unicode或是ansi的.
    具体的你再问问别人吧.
      

  7.   

    unicode需要你安装vc时选择,没有装的话,从光盘安装上
      

  8.   

    TO:9731boy(发呆的上帝)
    加上这个标记后,所有以前的都得用unicode了,开始没有错,现在一下子出现了27个错误,看来得改下了。像MessageBoxA改成MessageBoxW,呵呵,谢谢了~试下先。
      

  9.   

    像MessageBoxA改成MessageBoxW,呵呵,谢谢了~试下先。
    --
    不用的.messagebox本身就是一个宏的.可以根据选择的unicode来选择用A还是用W,
    最好是你的有关字符串操作都用CString.不要用char或wchar_t.而用TCHAR,这也是一个宏.good luck
      

  10.   

    TO:9731boy(发呆的上帝)
    哦,这样啊,好的,谢谢~
    刚试了下,不过不改的话好象不行哦,比如:
    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();
    }
      

  11.   

    自从加了标记_UNICODE后,怎么老是提示错误,找不到MFC42UD.DLL,VC6中有没有这样的文件啊?
    我查了没有,难道我的环境中这个文件丢失了??
      

  12.   

    你把vc的安装盘找出来,搜索提示找不到的文件 :)然后拷贝一下到vs相对应的目录下,如lib,
    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();
    }