sha*_*oth 8 user-interface winapi fonts visual-c++
我需要在我的原生C++ Win32 GUI应用程序中绘制一列垂直文本(日语 - 从上到下而不是从左到右).我查看了MSDN,但只发现了如何绘制从右到左的文本.
除了分别绘制每个字符外,如何输出从上到下的文本?
直接的Win32 API无法以这种方式绘制(未旋转的)垂直文本(使用任意字体),除了1个字符.
您可以使用GDI +执行更复杂的文本输出 但是这可能不是您想要的,因为文本将是垂直的,但字符也将被旋转.
类似地,您可以使用具有900或2700的lfEscapement值的CreateFont来获取旋转文本,但这将旋转所有内容.所以这也无济于事.
要执行日语从上到下的绘制,您希望字符不旋转,但每个字符的位置要在Y中前进而不在X中前进.Windows没有为所有字体执行此操作的API.(你可以从右到左,从左到右,但不是从上到下).
理论上,创建一个方向为900且擒纵机构为2700的字体可以达到你想要的效果,但是如果你设置了擒纵机构,那么大多数字体都会忽略方向.对于日语字体,这可能会有所不同.值得花一些时间玩.(有关详细信息,请参阅附录)
我认为你最好的选择可能是使用ExtTextOut一次绘制一个角色的循环,它可以让你完全控制每个角色的位置.
如果您使用ETO_OPAQUE绘制列中的第一个字符,而不是所有其他字符,那么您将被允许在需要时垂直填充字符.
Roygbiv指出一篇有趣的文章说,当你使用CreateFont一个lfEscapement值为2700的字体时,名字以@开头的字体与其他字体的行为不同,这些特殊字体产生直立字符,同时仍然向前推进页面.因此,虽然无法对任意字体执行任何操作,但您可以使用某些字体使其工作.
出于好奇,我写了一个小的控制台应用程序来枚举字体并列出名称.我的Windows Server 2003计算机没有名称以@开头的字体.但我的Windows 7机器有一些.所有似乎都是中文字体,我在默认的Windows 7 Ultimate安装中看不到日文字体.
| 归档时间: |
|
| 查看次数: |
6510 次 |
| 最近记录: |