vs2010 mfc项目配置属性的字符集为Unicode和多字节时,两者转换后使用的控件外观不一样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2010 mfc项目配置属性的字符集为Unicode和多字节时,两者转换后使用的控件外观不一样相关的知识,希望对你有一定的参考价值。

例如COMBO box的下拉在Unicode可以查看到所以内容,而多字节时下拉部分缩成一团 看不见了

是的,这是正常现象。你可以说这是VC的BUG,也可以说是多字符集考虑。
资源文件rc中,对每个部分都有关于字符集的设定,大部分资源都是单一属性的,不能在其它字符集下使用。如果需要多字符集,甚至多国语言,你需要对每种字符集定制单独的资源。
如果你的一个资源在所有字符集下都使用,其实是无法保障正确显示的。追问

那我要怎么改成在多字符集下,combo 控件的正常显示呢?

追答

如果不是来回切换,那么在固定字符集下,资源中调整一下控件就可以了呀。
如果希望一直能够来回切换,就比较麻烦了(个人感觉这两种直接的切换也没什么必要,又不是做多国语言)
一般多国语言是这样做的:
在资源中,创建两种资源,相同ID,不同字符集。这样在编译的时候,VC会自己找到合适的字符集资源进行编译,就不会有问题了。也可以使用DLL资源模式,一个字符集一个DLL文件,动态加载资源。
不过你这个需求,个人感觉没必要做两份,不值得。试试用文本方式打开.rc文件,看看控件定义部分的代码,手动调整一下字符集定义就可以了。

追问

用文本方式打开.rc文件,如何手动调整一下字符集定义?不会改:我想下拉可以查看到所有选项

追答

你先明确,是不是要来回切换。
如果不是,在资源的对话框编辑界面,选中下拉框(可以需要点击两次,各个版本不同),出现可以下拉的框子,拉下来就可以了,这个是下拉长度控制。

参考技术A 这个要看具体代码。
mfc程序的unicode字符集下,默认cstring等都是双字节存储,也就是wchar。很多系统类、函数的参数也是如此。
如果你cfile使用char
*进行读取,那么两种模式下不会有什么区别,如果是用tchar或者cstring就是不一样的。
参考技术B 在stdafx头文件最下方有几句话,#ifdef _UNICODE开始,楼主可以琢磨一下这几句话,它的作用就是决定选择哪种界面风格,删掉跟unicode相关的if语句就可以达到多字节下也可以跟当前windows风格一样

VS2008 MFC 项目表现不同

【中文标题】VS2008 MFC 项目表现不同【英文标题】:VS2008 MFC projects behave differently 【发布时间】:2014-10-28 16:03:39 【问题描述】:

在 VS 2008 中,我有两个基于 MFC 的托管 C++ 项目 A 和 B。

对于项目 A 项目->properties->common properties, Framework and references-> 添加新引用会导致一个面板出现,其中包含以下四个选项卡: .Net、COM、项目、浏览、最近

对于项目B project->properties->common properties, Framework and references-> 添加新引用会导致一个面板出现,其中只有一个选项卡: 项目

这两个项目的哪些属性可能不同(从而导致上述差异)?

【问题讨论】:

【参考方案1】:

我注意到 Project 有一些使用 /clr 选项编译的 .cpp 文件。 我再重复一遍,一些 .cpp 文件(不是整个项目)是用“公共语言运行时支持 (/clr)”编译的。选择.cpp文件后,可以看到此选项,然后单击项目 - >属性。 为项目 B 中的单个文件(甚至)选择 thsi 选项解决了该问题。

【讨论】:

以上是关于vs2010 mfc项目配置属性的字符集为Unicode和多字节时,两者转换后使用的控件外观不一样的主要内容,如果未能解决你的问题,请参考以下文章

怎么让VS2015编写的程序在XP中顺利运行

VS2012编译的MFC程序XP运行出错R6010

vs2010环境下,MFC如何修改窗体名字?

vs2010环境下,MFC如何修改窗体名字?

VS2010里MFC中的ListBox为啥输出字符时,显示不出字体,只能看到有这一项?

VS mfc 配置项目属性表----一劳永逸法-分debug与release版本