如何显示竖排的多行文字?

时间:2022-09-04 23:50:48
要在一个图片的右侧配上说明文字,要求是竖排多行,最好能够根据输入文字的不同进行动态换行。
好像TextOut和DrawText都不行
请注意要求,1、竖排,像中国的古书那种样子;2、多行,最好支持动态换行。
尽量简单,多谢了。

15 个解决方案

#1


一个字一个字的draw

#2


那多行时,是要求从左至右,还是从右至左啊

#3


引用 2 楼 happyparrot 的回复:
那多行时,是要求从左至右,还是从右至左啊


这个倒没有要求,都可以。

#4


http://zhidao.baidu.com/question/40869964.html

#5


竖排就是字体前加上一个 @

  CFont   myFont;           //创建字体对象   
      
    //创建逻辑字体   
    myFont.CreateFont(   
                56,                 //字体高度(旋转后的字体宽度)=56     
                20,                 //字体宽度(旋转后的字体高度)=20   
                2700,                 //字体显示角度=270°   
                0,                                     //nOrientation=0   
                10,                                   //字体磅数=10   
                FALSE,                             //非斜体   
                FALSE,                             //无下划线   
                FALSE,               //无删除线   
                DEFAULT_CHARSET,         //使用缺省字符集   
                OUT_DEFAULT_PRECIS,   //缺省输出精度   
                CLIP_DEFAULT_PRECIS,//缺省裁减精度     
                DEFAULT_QUALITY,         //nQuality=缺省值   
                DEFAULT_PITCH,             //nPitchAndFamily=缺省值   
                "@system");                   //字体名=@system   
    CFont   *pOldFont=dc.SelectObject(&myFont);//选入设备描述表   
    CRect   rtClient;   

然后用 DrawText 输出就可以了

#6


引用 4 楼 happyparrot 的回复:
http://zhidao.baidu.com/question/40869964.html


这个只做了竖排,没有满足我的第2个要求。

#7


http://topic.csdn.net/t/20031117/16/2465525.html

#8


引用 5 楼 marrco2005 的回复:
竖排就是字体前加上一个 @

CFont myFont; //创建字体对象

//创建逻辑字体
myFont.CreateFont(
              56, //字体高度(旋转后的字体宽度)=56
              20, //字体宽度(旋转后的字体高度)=20
              2700, //字体显示角度=270°
              ……


这个我知道。现在的问题在于,无论我如何预留显示区,都只能显示一列,其他的文字都不见了。

#9


引用 7 楼 marrco2005 的回复:
http://topic.csdn.net/t/20031117/16/2465525.html


这个方法我也想过,但是文中的例子太特殊了,刚好是一句一句的诗。比如我要输出金庸小说里的任何200个文字,怎么办?

#10


单个文字是横的还是竖的?如果是竖的就只能一个一个的ExtTextOut,如果是横的可以SetWorldTransform
然后DrawText

#11


一个字一个字的画,不过要分别开UNICODE ,非 UNICODE 字符,
取一个字,画一下,然后,再重计算下一个文字的位置,然后再画,就行了.
一般的,都是连在一起画的.

#12


好东西,标记一下

#13


引用 9 楼 zhaolinger2 的回复:
引用 7 楼 marrco2005 的回复:
http://topic.csdn.net/t/20031117/16/2465525.html


这个方法我也想过,但是文中的例子太特殊了,刚好是一句一句的诗。比如我要输出金庸小说里的任何200个文字,怎么办?

既然竖排绘制已经有方法了,那么只要把这些文字自己切分成一竖排一竖排的,然后再TextOut到DC上那不就行了。

#14


在Win2000和以后的平台上ExtTextOut API支持新的竖向排版功能,方法是使用ETO_PDY标志同时指定每个字符的位置。

#15


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#1


一个字一个字的draw

#2


那多行时,是要求从左至右,还是从右至左啊

#3


引用 2 楼 happyparrot 的回复:
那多行时,是要求从左至右,还是从右至左啊


这个倒没有要求,都可以。

#4


http://zhidao.baidu.com/question/40869964.html

#5


竖排就是字体前加上一个 @

  CFont   myFont;           //创建字体对象   
      
    //创建逻辑字体   
    myFont.CreateFont(   
                56,                 //字体高度(旋转后的字体宽度)=56     
                20,                 //字体宽度(旋转后的字体高度)=20   
                2700,                 //字体显示角度=270°   
                0,                                     //nOrientation=0   
                10,                                   //字体磅数=10   
                FALSE,                             //非斜体   
                FALSE,                             //无下划线   
                FALSE,               //无删除线   
                DEFAULT_CHARSET,         //使用缺省字符集   
                OUT_DEFAULT_PRECIS,   //缺省输出精度   
                CLIP_DEFAULT_PRECIS,//缺省裁减精度     
                DEFAULT_QUALITY,         //nQuality=缺省值   
                DEFAULT_PITCH,             //nPitchAndFamily=缺省值   
                "@system");                   //字体名=@system   
    CFont   *pOldFont=dc.SelectObject(&myFont);//选入设备描述表   
    CRect   rtClient;   

然后用 DrawText 输出就可以了

#6


引用 4 楼 happyparrot 的回复:
http://zhidao.baidu.com/question/40869964.html


这个只做了竖排,没有满足我的第2个要求。

#7


http://topic.csdn.net/t/20031117/16/2465525.html

#8


引用 5 楼 marrco2005 的回复:
竖排就是字体前加上一个 @

CFont myFont; //创建字体对象

//创建逻辑字体
myFont.CreateFont(
              56, //字体高度(旋转后的字体宽度)=56
              20, //字体宽度(旋转后的字体高度)=20
              2700, //字体显示角度=270°
              ……


这个我知道。现在的问题在于,无论我如何预留显示区,都只能显示一列,其他的文字都不见了。

#9


引用 7 楼 marrco2005 的回复:
http://topic.csdn.net/t/20031117/16/2465525.html


这个方法我也想过,但是文中的例子太特殊了,刚好是一句一句的诗。比如我要输出金庸小说里的任何200个文字,怎么办?

#10


单个文字是横的还是竖的?如果是竖的就只能一个一个的ExtTextOut,如果是横的可以SetWorldTransform
然后DrawText

#11


一个字一个字的画,不过要分别开UNICODE ,非 UNICODE 字符,
取一个字,画一下,然后,再重计算下一个文字的位置,然后再画,就行了.
一般的,都是连在一起画的.

#12


好东西,标记一下

#13


引用 9 楼 zhaolinger2 的回复:
引用 7 楼 marrco2005 的回复:
http://topic.csdn.net/t/20031117/16/2465525.html


这个方法我也想过,但是文中的例子太特殊了,刚好是一句一句的诗。比如我要输出金庸小说里的任何200个文字,怎么办?

既然竖排绘制已经有方法了,那么只要把这些文字自己切分成一竖排一竖排的,然后再TextOut到DC上那不就行了。

#14


在Win2000和以后的平台上ExtTextOut API支持新的竖向排版功能,方法是使用ETO_PDY标志同时指定每个字符的位置。

#15


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法