建议:
工程使用Unicode编码方式编译。
使用Unicode编码的好处
使用Unicode编码可以使您的工程同时支持多种语言,使您的工程国际化。
另外,Windows NT是使用Unicode进行开发的,整个系统都是基于Unicode的。如果调用一个API函数并给它传递一个ANSI(ASCII字符集以及由此派生并兼容的字符集,如:GB2312,通常称为ANSI字符集)字符串,那么系统首先要将字符串转换成Unicode,然后将Unicode字符串传递给 *** 作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结果返回给您的应用程序。进行这些字符串的转换需要占用系统的时间和内存。如果用Unicode来开发应用程序,就能够使您的应用程序更加有效地运行。
VC++60中编写Unicode编码的应用程序
VC++ 60支持Unicode编程,但默认的是ANSI,所以开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持UNICODE的应用程序。
使用VC++ 60进行Unicode编程主要做以下几项工作:
1、为工程添加UNICODE和_UNICODE预处理选项。
具体步骤:打开[工程]->[设置…]对话框,在C/C++标签对话框的“预处理程序定义”中去除_MBCS,加上_UNICODE,UNICODE。(注意中间用逗号隔开)
在没有定义UNICODE和_UNICODE时,所有函数和类型都默认使用ANSI的版本;在定义了UNICODE和_UNICODE之后,所有的MFC类和Windows API都变成了宽字节版本了。
2、设置程序入口点
因为MFC应用程序有针对Unicode专用的程序入口点,我们要设置entry point。否则就会出现连接错误。
设置entry point的方法是:打开[工程]->[设置…]对话框,在Link页的Output类别的Entry Point里填上wWinMainCRTStartup。
3、使用ANSI/Unicode通用数据类型
微软提供了一些ANSI和Unicode兼容的通用数据类型,我们最常用的数据类型有_T ,TCHAR,LPTSTR,LPCTSTR。
顺便说一下,LPCTSTR和const TCHAR是完全等同的。其中L表示long指针,这是为了兼容Windows 31等16位 *** 作系统遗留下来的,在Win32 中以及其它的32位 *** 作系统中,long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。P(pointer)表示这是一个指针;C(const)表示是一个常量;T(_T宏)表示兼容ANSI和Unicode,STR(string)表示这个变量是一个字符串。综上可以看出,LPCTSTR表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。比如:
TCHAR szText=_T(“Hello!”);
TCHAR szText[]=_T(“I Love You”);
LPCTSTR lpszText=_T(“大家好!”);
使用函数中的参数最好也要有变化,比如:MessageBox(_T(“你好”));
其实,在上面的语句中,即使您不加_T宏,MessageBox函数也会自动把“你好”字符串进行强制转换。但我还是推荐您使用_T宏,以表示您有Unicode编码意识。
4、修改字符串运算问题
一些字符串 *** 作函数需要获取字符串的字符数(sizeof(szBuffer)/sizeof(TCHAR)),而另一些函数可能需要获取字符串的字节数sizeof(szBuffer)。您应该注意该问题并仔细分析字符串 *** 作函数,以确定能够得到正确的结果。
ANSI *** 作函数以str开头,如strcpy(),strcat(),strlen();
Unicode *** 作函数以wcs开头,如wcscpy,wcscpy(),wcslen();
ANSI/Unicode *** 作函数以_tcs开头 _tcscpy(C运行期库);
ANSI/Unicode *** 作函数以lstr开头 lstrcpy(Windows函数);
考虑ANSI和Unicode的兼容,我们需要使用以_tcs开头或lstr开头的通用字符串 *** 作函数。
看一下你工程文件选择的字符集是Unicode还是multi-char,然后确认一下你的文本内容是不是和之相一致。还有确认你的 *** 作系统是中文还是英文,如果是英文可能会出现这样的问题,需要确认相关语言支持是否安装。
你试一下在ResourceView里找到对话框资源,右击,点击属性,d出对话框的属性对话框,找到
“language:”选项,将语言改成“Chinese(PRC),可以试一下
你具体点说啊,你关联的一个变量是什么类型的啊,Cstring类型?还是int类型?还是long类型。
看你的意思是要用密码对吗。那应该是Csting类型。如果是的话,那你在关联变量时候会自动给你初始化的,在该类的构造函数里面,如果自己在界面上改的话,记得最后要添加
updatedata(false);
以上就是关于mfc 按钮上乱码问题全部的内容,包括:mfc 按钮上乱码问题、Microsoft Visual C++ 6.0 编辑MFC程序,在运行后的文本框中出现乱码!!求解决!!、MFC里新建单文档,里面加对话框一旦写中文就出现乱码,急急急啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)