控件中如何显示Unicode的字符串呀!!!!!!

时间:2021-01-05 19:34:57
如题,我用messagebox打印出来的字符串是正确的,但是在工程里面的控件中显示还是乱码,不知道怎么解决?

23 个解决方案

#1


编译工程为UNICODE工程

#2


工程控件是你不是在属性里面改的??

你试试 动态的 设置控件  SetWindowText

#3


用W版本的API输出

#4


USES_CONVERSION;
control.SetWindowText(A2CT(ansiStr));

#5


项目使用Unicode字符集,对话框资源语言设置为中型。

#6


不要用强制转换,字符串是用_T()宏,函数使用中性函数

#7


我的项目本来就是unicode的,对话框资源语言也设置为中型了,用用W版本的API输出等方法都试过了,还是不行

#8


USES_CONVERSION; 
SetWindowTextW(GetDlgItem(hWndDlg,IDC_ST1),A2CT(strValue));这种方法我也试过了,但是strValue是wchar_t*类型的,A2CT(strValue),这一步编译根本不能通过

#9


USES_CONVERSION;  //头文件要添加#include "atlbase.h"
wchar_t* data=A2W(str_datatemp);//CString 转 wchar_t

#10


如果是ANSI的字符串我试过了,用上面的方法还是失败比如Πλήκτρο κύλισης这个字符,我用SetWindowText将他显示在主窗口上就可以,显示在EDIT,COMBOX空间中就是乱码了

#11


USES_CONVERSION;  //头文件要添加#include "atlbase.h" 
wchar_t* data=A2W(str_datatemp);//CString 转 wchar_t ?我的字符串本来就是wchar_t*类型的,用MessageBoxW打印出来就是正确的,我还需要用A2W转化?我需要是的如何让工程中的空间也能显示Unicode的字符,而不是转化字符串的问题啊,字符串是没有问题的,否则我打印出来的肯定是错误的

#12


你的VC是哪个版本,什么类型的项目,什么控件,用什么方式显示字符串?

#13


VS2005 VC6.0都试过控件就是MS自带的,比如EDIT ComboBox等

#14


W2CT

#15


试过拉,效果还是一样的,还是有乱码

#16


真不明白在窗口的标题栏显示字符串和MessageBox显示的时候为什么没有乱码

#17


你的系统里有相应语言字体包吗
看看修改对话框的相应字体试试

#18


估计我系统里面没有相关的语言字体包,修改对话框相应的字体是无效果的,不知道大家用过skype那个聊天软件没有,他的界面就支持各种语言,就算你是中文的OS一样可以显示其它国家的语言文字,不知道它是怎么实现的

#19


看来这个问题还蛮难的

#20


我用2005在EDIT上试了一下,没有发现乱码。

#21


楼上的兄台?你要是不相信的话我可以把DEMO程序发给你,不相信你试一下,我QQ224790156

#22


那你运行你的程序,把Πλήκτρο κύλισης直接粘贴到edit里面看看什么情况

#23


如果你用文本方式打开RC文件,在里面看到的字符串没有乱码的,界面就能正常显示。combobox里面添加的内容在RC文件里是不能显式看见的,是在RC文件下用一段特殊的字符表示添加的内容。combobox要是有乱码,没法在资源里改。所以combobox里的内容最好在代码中动态添加,但要把代码文件存成Unicode的。
还有字体也是有可能的,把字体设成Microsoft scan seff,一般都可以。如果某个字体里没有对你要求的字符,它肯定也是写不出来

#1


编译工程为UNICODE工程

#2


工程控件是你不是在属性里面改的??

你试试 动态的 设置控件  SetWindowText

#3


用W版本的API输出

#4


USES_CONVERSION;
control.SetWindowText(A2CT(ansiStr));

#5


项目使用Unicode字符集,对话框资源语言设置为中型。

#6


不要用强制转换,字符串是用_T()宏,函数使用中性函数

#7


我的项目本来就是unicode的,对话框资源语言也设置为中型了,用用W版本的API输出等方法都试过了,还是不行

#8


USES_CONVERSION; 
SetWindowTextW(GetDlgItem(hWndDlg,IDC_ST1),A2CT(strValue));这种方法我也试过了,但是strValue是wchar_t*类型的,A2CT(strValue),这一步编译根本不能通过

#9


USES_CONVERSION;  //头文件要添加#include "atlbase.h"
wchar_t* data=A2W(str_datatemp);//CString 转 wchar_t

#10


如果是ANSI的字符串我试过了,用上面的方法还是失败比如Πλήκτρο κύλισης这个字符,我用SetWindowText将他显示在主窗口上就可以,显示在EDIT,COMBOX空间中就是乱码了

#11


USES_CONVERSION;  //头文件要添加#include "atlbase.h" 
wchar_t* data=A2W(str_datatemp);//CString 转 wchar_t ?我的字符串本来就是wchar_t*类型的,用MessageBoxW打印出来就是正确的,我还需要用A2W转化?我需要是的如何让工程中的空间也能显示Unicode的字符,而不是转化字符串的问题啊,字符串是没有问题的,否则我打印出来的肯定是错误的

#12


你的VC是哪个版本,什么类型的项目,什么控件,用什么方式显示字符串?

#13


VS2005 VC6.0都试过控件就是MS自带的,比如EDIT ComboBox等

#14


W2CT

#15


试过拉,效果还是一样的,还是有乱码

#16


真不明白在窗口的标题栏显示字符串和MessageBox显示的时候为什么没有乱码

#17


你的系统里有相应语言字体包吗
看看修改对话框的相应字体试试

#18


估计我系统里面没有相关的语言字体包,修改对话框相应的字体是无效果的,不知道大家用过skype那个聊天软件没有,他的界面就支持各种语言,就算你是中文的OS一样可以显示其它国家的语言文字,不知道它是怎么实现的

#19


看来这个问题还蛮难的

#20


我用2005在EDIT上试了一下,没有发现乱码。

#21


楼上的兄台?你要是不相信的话我可以把DEMO程序发给你,不相信你试一下,我QQ224790156

#22


那你运行你的程序,把Πλήκτρο κύλισης直接粘贴到edit里面看看什么情况

#23


如果你用文本方式打开RC文件,在里面看到的字符串没有乱码的,界面就能正常显示。combobox里面添加的内容在RC文件里是不能显式看见的,是在RC文件下用一段特殊的字符表示添加的内容。combobox要是有乱码,没法在资源里改。所以combobox里的内容最好在代码中动态添加,但要把代码文件存成Unicode的。
还有字体也是有可能的,把字体设成Microsoft scan seff,一般都可以。如果某个字体里没有对你要求的字符,它肯定也是写不出来