cstring的format,使用类似%-20s的方法,当参数是cstring时无法对齐。

做的是数据库的检索,全部是unicode,一次取一行字段的值,每个字段各存到一个cstring里,最后把所有字段用上面说的format存到一个总的cstring里,输出这... 做的是数据库的检索,全部是unicode,一次取一行字段的值,每个字段各存到一个cstring里,最后把所有字段用上面说的format存到一个总的cstring里,输出这个cstring,这样的操作有好几行,希望每行的每个同类字段对齐,结果是不行,尝试WideCharToMultiByte转为char再试,变成乱码,于是囧了。
麻烦高手帮帮忙,谢谢。
使用的是clistbox,变量都是cstring类型,一次插入一个all。
all.Format(L"%-20s%-20s%-20s%-32s%-20s%-10s%-20s%-10s%-32s",name,teamname,enemy,country,scale,period,mode,time,place);
展开
 我来答
bhtzu
2012-12-29 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4214万
展开全部
最好有个截图。
不能对齐的可能有两个方面,一个是没有实际打到20-n的空格,另外一个是字体问题(很多字体的字符宽度不一样)。
解决办法有几个:
1·使用表格格式,比如CListCtrl的Report模式
2·TextOut的话,最好分开字段成为数组,定位输出
3·更改为等宽字体,在一些界面下可以实现对齐
4·灵活使用\t(tab)替换部分计算空格,也可以实现对齐。

针对补充,1/3/4都适合。可以先尝试3/4
GetDlgItem(IDC_XXX)->SetFont(my_font); //改变字体
追问
我相信1可以,但我的代码已经到了完成阶段,再改代价就太大了,方法3经验证不行,在使用方法4时我发现了,数字,英文和字符输出时占的位置不一样,英文相当于一个空格,数字大些,字符是两个空格,有点棘手。
追答
说实话,1是最合适的,其实改动也不大。
3可以肯定能实现,你没有弄对而已。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式