wsprintf函数的空格占位符和0占位符所占的空间不一样

小乖乖_学技术 2013-04-23 08:57:21
在窗体工程中,添加两个Edit组件(Edit1和Edit2,默认文本都是10),再添加一个命令按钮(Button1)和一个ListBox组件(ListBox1),在命令按钮响应函数中添加程序:
int a,b;
a=StrToInt(Edit1->Text);
b=StrToInt(Edit2->Text);
char aChar[100];
//wsprintf(aChar,"%10d%10d",a,b);//空格占位符
wsprintf(aChar,"%010d%010d",a,b);//0占位符
ListBox1->Items->Add(aChar);
如果使用0占位符,Edit1文本不改变,输出的内容A是00000000100000000010
将Edit1文本修改成100, 输出的内容B是00000001000000000010,注意:内容A和内容B的每一位的位置是上下对齐的
如果使用空格占位符,Edit1文本不改变,输出的内容A是 10 10
将Edit1文本修改成100, 输出的内容B是 100 10,注意:内容A和内容B的每一位的位置是上下是不对齐的
我感觉0占位符在ListBox组件的文本中占用的单位宽度要大于空格占位符在ListBox组件的文本中占用的单位宽度
请问:如何在使用空格占位符的情况下让上下两条文本一一对齐
...全文
220 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
6楼的说法是错的 命令按钮的响应函数修改成: int a,b; a=StrToInt(Edit1->Text); b=StrToInt(Edit2->Text); char aChar[100]; //wsprintf(aChar,"%10d%10d",a,b);//空格占位符 wsprintf(aChar,"%2d%2d%2d",a,b,b);//0占位符 //ListBox1->Font->Charset=GB2312_CHARSET; ListBox1->Items->Add(aChar); wsprintf(aChar,"%s%s","汉","字"); ListBox1->Items->Add(aChar); 在字体DEFAULT_CHARSET条件下 将Edit1文本修改成0,将Edit2文本修改成0 输出的结果是:'0' + 空格'的宽度<一个汉字的宽度
缘中人 2013-04-25
  • 打赏
  • 举报
回复
越解释越糊涂了
缘中人 2013-04-25
  • 打赏
  • 举报
回复
'0' + '空格' 的宽度就等于一个汉字的宽度
  • 打赏
  • 举报
回复
DEFAULT_CHARSET使用的是等宽字体和比例字体混合的字体形式 其中空格符是比例字体,0是等宽字体 可以这样理解?
ccrun.com 2013-04-24
  • 打赏
  • 举报
回复
你还是没有弄明白。只是因为宋体是等宽字体,仅此而已。
  • 打赏
  • 举报
回复
GB2312_CHARSET使用的是WCHAR(双字符),DEFAULT_CHARSET使用的是CHAR(单字符) 在wsprintf函数使用的占位符中,字符0使用的是WCHAR编码的0,空格符使用的是CHAR编码的空格符?
  • 打赏
  • 举报
回复
一语道破梦中人,谢谢! 在对象检视器面板中修改ListBox组件的Font属性下面的Charset属性值为GB2312_CHARSET 或者添加语句(ListBox1->Font->Charset=GB2312_CHARSET;) 即可实现目的
ccrun.com 2013-04-24
  • 打赏
  • 举报
回复
你把 ListBox 的字体设成等宽字体就行了,比如宋体。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧