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); 展开
麻烦高手帮帮忙,谢谢。
使用的是clistbox,变量都是cstring类型,一次插入一个all。
all.Format(L"%-20s%-20s%-20s%-32s%-20s%-10s%-20s%-10s%-32s",name,teamname,enemy,country,scale,period,mode,time,place); 展开
1个回答
展开全部
最好有个截图。
不能对齐的可能有两个方面,一个是没有实际打到20-n的空格,另外一个是字体问题(很多字体的字符宽度不一样)。
解决办法有几个:
1·使用表格格式,比如CListCtrl的Report模式
2·TextOut的话,最好分开字段成为数组,定位输出
3·更改为等宽字体,在一些界面下可以实现对齐
4·灵活使用\t(tab)替换部分计算空格,也可以实现对齐。
针对补充,1/3/4都适合。可以先尝试3/4
GetDlgItem(IDC_XXX)->SetFont(my_font); //改变字体
不能对齐的可能有两个方面,一个是没有实际打到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可以肯定能实现,你没有弄对而已。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询