CSting Title=_T("nihao");
BYTE Buf[1024];
wcharcopy(buf,Title); //网上找的转换函数。
构建对话框,buf的内容作为标题,对话框标题显示正常“nihao”
。。但是如果是:CSting Title=_T("你好nihao");
BYTE Buf[1024];
wcharcopy(buf,Title);//网上找的转换函数。如果是汉字就是乱码,对话框标题显示一串“???????nihao”,就是其中的汉字无法显示,这是什么原因呢。工程使用_MBCS编码。请高手不吝指教。
BYTE Buf[1024];
wcharcopy(buf,Title); //网上找的转换函数。
构建对话框,buf的内容作为标题,对话框标题显示正常“nihao”
。。但是如果是:CSting Title=_T("你好nihao");
BYTE Buf[1024];
wcharcopy(buf,Title);//网上找的转换函数。如果是汉字就是乱码,对话框标题显示一串“???????nihao”,就是其中的汉字无法显示,这是什么原因呢。工程使用_MBCS编码。请高手不吝指教。
或者 MultiByteToWideChar 转一下
CString m_Title="你好nihao";
int n = m_Title.GetLength();
int len = WideCharToMultiByte(CP_ACP,0,(char*)LPCSTR(m_Title),n,NULL,0,NULL,NULL);
char * ptitle = new char[len+1];
WideCharToMultiByte(CP_ACP,0,m_Title,m_Title.GetLength() + 1 ,ptitle,len + 1 ,NULL,NULL);
ptitle[len+1] = '/0';编译通不过,错误提示:
error C2664: 'WideCharToMultiByte' : cannot convert parameter 3 from 'char *' to 'const unsigned short *'这么个问题搞2小时了。请高手指教啊
const char *p = m_Title.GetString();
如果要存入数组就strcpy_s
糊涂了,应该用
MultiByteToWideChar,奇怪还是总编译不过去,晕死了。
代码如下:
int Tlen=m_Title.GetLength();
const char *pTitle = m_Title.GetBuffer(Tlen);
int charLen = strlen(pTitle);
int len = MultiByteToWideChar(CP_ACP,0,pTitle,Tlen,NULL,0);
TCHAR *buf = new TCHAR[len + 1];
MultiByteToWideChar(CP_ACP,0,pTitle,charLen,buf,len);
buf[len] = '/0'; 我几乎就是照搬网上的讲解啊,编译错误:
error C2664: 'MultiByteToWideChar' : cannot convert parameter 5 from 'char *' to 'unsigned short *'
MultiByteToWideChar(CP_ACP,0,pTitle,charLen,buf,len);
buf[len] = '/0';
BYTE* ptr=m_buf[1000];
memcpy(ptr,buf,sizeof(buf));
delete []buf;
InitModalIndirect( (DLGTEMPLATE*) m_buf, pParent );
发现构造出来对话框的标题还是乱码呢。
2:memcpy(ptr,buf,sizeof(buf));这行代码莫名其妙
3:不知道为啥要MultiByteToWideChar,汉字存入byte数组跟对话框标题乱码有个毛关系