- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
vc设置字体颜色:请特别注意VC字符集设置
疯狂代码 http://CrazyC/ ĵ http:/CrazyC/CDevelopment/Article14240.html
VC真是个非常笨非常不友好工具还是这样说VC(MFC)和现在流行.net framework java比起来就想石器时代跟
工业时代相比样!
接触MFC也有几年了为了它有过加班、有过熬夜、甚至通宵代码没有十万行也应该有几万行了但是MFC就是这
么牛它牛得不但令新手忘而却步而且常常令有经验软件Software工程师也栽跟斗最近由于个小小环境设置设置
问题花了很多时间这跟用惯了VC6突然转到VC2005有关但关键还是VC实在太笨了它让我在周内连续两中招次
!
第次中招是这样很简单:
我不知道VC.net2005默认工程默认设置是采用“Unicode集”(Unicode Character Set)以前用VC6工程时候
默认是“多集”(Multi-Byte Character Set)以前也没有用过VC.net2005啊我直认为.net是用来在
framework上面编程在MFC上编程没有必要打开庞大.net2005把机器弄得像牛拉车样
我声明了个CString按计划给它赋值就像下面:
CString s;
s.Format(“count = %d”,count);
按经验这肯定不会有但是不好意思编译这是我环境采用Unicode集而我给CStringFormat是“多集”(Multi-
Byte)所以编译不通过要知道在这种设置下使用MessageBox(“ddd”);编译是不会通过系统是
MessageBoxW即Unicode宽集那个
还好我根据编译器提示把s.Format(“count = %d”,count);改成s.Format(_T(“count = %d”,count);就搞定
了_T代表个宏宏意思就是把串转成宽表示同样MessageBox(“ddd”);可以为MessageBox(_T(“ddd”));
但是还有个问题就是所有窗体显示东西都是宽例如a在内存里就是a\0两个字节前面个字节a后面是\0当从窗体取
下数据(例如用户输入)要跟其他平台交互时例如网络传输到远端机器如果那边使用不是Unicode集就会出问题为
了使界面和后台传输致只好使用把宽转换成多集表示:
CString strWideChar;
strWideChar.Format(_T(“这是宽字节哦”));
char buf[20];
mem(buf,0,20);
WideCharToMultiByte( //转换Unicode到Ansi
CP_ACP,
WC_COMPOSITECHECK | WC_DEFAULTCHAR,
strWideChar,
strWideChar.GetLength,
(char *)buf, //转换到缓冲区中
20, //最多个字节
0,
0
);
同样你接收到串想要在界面正常显示还必须把它转换成宽字节表示(烦吧?):
char chBytes[8];
memcpy(chBytes,”aaaaaaa\0”,8);
WCHAR wch[9];
n = MultiByteToWideChar( //转换Unicode到Ansi
CP_ACP,
0,
chBytes,
8,
wch, //转换到缓冲区中
8 //最多个字节
);
wch[n] = \0;
这样每次从界面取数据和把数据显示到界面上都要先做处理但是也可以把编译环境设置成“多集”(Multi-Byte
Character Set)就可以避免这样转换来转换去(可惜我发现时候代码已经差不多写完了)就是在”Project-
Configuration Properties-General-Character Set选择“Use Unicode Character Set”就是使用
Uncode集选择” Use Multi-Byte Character Set”就是多字节集
第 2次中招god花了我好长时间才找到问题:
我在CodePr
文档评论(0)