GDI+ DrawString空格问题

时间:2021-03-24 10:54:59

szText = _T("Hello ABC");
                StringFormat oFormat;
oFormat.SetAlignment(StringAlignmentFar );
oFormat.SetLineAlignment(StringAlignmentFar );
oFormat.SetFormatFlags(oFormat.GetFormatFlags() |StringFormatFlagsMeasureTrailingSpaces);
pGraphics->DrawString(szText, szText.GetLength(), &oFont1, rcLayout, &oFormat, &oBrush);


我用GDI+绘制字符,出现的问题如下:
在szText的两个单词之间无论添加多少空格,最多只能画两行。
不知道是不是我StringFormat是不是还有参数没有设置?
谢谢大家!

12 个解决方案

#1


怎么都没有人回复我?

#2


好像会计算字符串的长度而换行,rcLayOut太宽所以才只有2行?

#3


谢谢。
引用 2 楼 j8daxue 的回复:
好像会计算字符串的长度而换行,rcLayOut太宽所以才只有2行?


不是,假如reLayout宽度固定为100,应该来讲,添加空格越多,可能导致有多行!但是他计算的时候,貌似无论多少空格都只会在一行以内画下来!不管字体大小多少。

#4


引用 3 楼 apchy_ll 的回复:
谢谢。

引用 2 楼 j8daxue 的回复:
好像会计算字符串的长度而换行,rcLayOut太宽所以才只有2行?


不是,假如reLayout宽度固定为100,应该来讲,添加空格越多,可能导致有多行!但是他计算的时候,貌似无论多少空格都只会在一行以内画下来!不管字体大小多少。

GDI+对这么多空格的处理不知道是怎样的,确实只换一行而已。
要换行在字符串里加\r\n就可以。空格那么多要达到什么目的?

#5


引用 4 楼 j8daxue 的回复:
引用 3 楼 apchy_ll 的回复:
谢谢。

引用 2 楼 j8daxue 的回复:
好像会计算字符串的长度而换行,rcLayOut太宽所以才只有2行?


不是,假如reLayout宽度固定为100,应该来讲,添加空格越多,可能导致有多行!但是他计算的时候,貌似无论多少空格都只会在一行以内画下来!不管字体大小多少。

GDI+对这么多空格的处理不知道是怎样的,确实只换一……

我接收键盘输入,然后显示起来,像一个edit控件,如果输入很多空格原则上讲需要将光标没输入应该空格就应该有一个字符~所以~。。

#6


试下GDI的DrawText组合DT_EDITCONTROL | DT_WORDBREAK

#7


大哥你想要什么效果?想要画多行你竖着画不就好了?

#8


试一下,全角空格

#9


谢谢你!
引用 7 楼 coubulaji 的回复:
大哥你想要什么效果?想要画多行你竖着画不就好了?

额~我是想一个单词后面不管你加多少个空格,它都只会在一行以内画完。
例如:_T("Hello                                 ABC");可能改好将ABC画到第二行,但是你不够在中间在添加多少空格,ABC都不会跑到第三行去!空格没有起到 占位的作用!

#10


谢谢你!
引用 8 楼 hdt 的回复:
试一下,全角空格

#11


Thanks,必须要用GDI+实现~悲剧了。。
引用 6 楼 j8daxue 的回复:
试下GDI的DrawText组合DT_EDITCONTROL | DT_WORDBREAK

#12


引用 11 楼 apchy_ll 的回复:
Thanks,必须要用GDI+实现~悲剧了。。

引用 6 楼 j8daxue 的回复:

试下GDI的DrawText组合DT_EDITCONTROL | DT_WORDBREAK

DirectX的文字都是用GDI实现的。GDI算是很底层的,既然GDI+能用GDI为什么不能?

#1


怎么都没有人回复我?

#2


好像会计算字符串的长度而换行,rcLayOut太宽所以才只有2行?

#3


谢谢。
引用 2 楼 j8daxue 的回复:
好像会计算字符串的长度而换行,rcLayOut太宽所以才只有2行?


不是,假如reLayout宽度固定为100,应该来讲,添加空格越多,可能导致有多行!但是他计算的时候,貌似无论多少空格都只会在一行以内画下来!不管字体大小多少。

#4


引用 3 楼 apchy_ll 的回复:
谢谢。

引用 2 楼 j8daxue 的回复:
好像会计算字符串的长度而换行,rcLayOut太宽所以才只有2行?


不是,假如reLayout宽度固定为100,应该来讲,添加空格越多,可能导致有多行!但是他计算的时候,貌似无论多少空格都只会在一行以内画下来!不管字体大小多少。

GDI+对这么多空格的处理不知道是怎样的,确实只换一行而已。
要换行在字符串里加\r\n就可以。空格那么多要达到什么目的?

#5


引用 4 楼 j8daxue 的回复:
引用 3 楼 apchy_ll 的回复:
谢谢。

引用 2 楼 j8daxue 的回复:
好像会计算字符串的长度而换行,rcLayOut太宽所以才只有2行?


不是,假如reLayout宽度固定为100,应该来讲,添加空格越多,可能导致有多行!但是他计算的时候,貌似无论多少空格都只会在一行以内画下来!不管字体大小多少。

GDI+对这么多空格的处理不知道是怎样的,确实只换一……

我接收键盘输入,然后显示起来,像一个edit控件,如果输入很多空格原则上讲需要将光标没输入应该空格就应该有一个字符~所以~。。

#6


试下GDI的DrawText组合DT_EDITCONTROL | DT_WORDBREAK

#7


大哥你想要什么效果?想要画多行你竖着画不就好了?

#8


试一下,全角空格

#9


谢谢你!
引用 7 楼 coubulaji 的回复:
大哥你想要什么效果?想要画多行你竖着画不就好了?

额~我是想一个单词后面不管你加多少个空格,它都只会在一行以内画完。
例如:_T("Hello                                 ABC");可能改好将ABC画到第二行,但是你不够在中间在添加多少空格,ABC都不会跑到第三行去!空格没有起到 占位的作用!

#10


谢谢你!
引用 8 楼 hdt 的回复:
试一下,全角空格

#11


Thanks,必须要用GDI+实现~悲剧了。。
引用 6 楼 j8daxue 的回复:
试下GDI的DrawText组合DT_EDITCONTROL | DT_WORDBREAK

#12


引用 11 楼 apchy_ll 的回复:
Thanks,必须要用GDI+实现~悲剧了。。

引用 6 楼 j8daxue 的回复:

试下GDI的DrawText组合DT_EDITCONTROL | DT_WORDBREAK

DirectX的文字都是用GDI实现的。GDI算是很底层的,既然GDI+能用GDI为什么不能?