我需要在我的本地C ++ Win32 GUI应用程序中绘制一列竖排文字(用日语书写 - 它是从上到下绘制而不是从左到右)。我查看了MSDN,只找到如何绘制从右到左的文本。
除了逐个绘制每个字符外,我该如何输出从上到下的文本?
我需要在我的本地C ++ Win32 GUI应用程序中绘制一列竖排文字(用日语书写 - 它是从上到下绘制而不是从左到右)。我查看了MSDN,只找到如何绘制从右到左的文本。
除了逐个绘制每个字符外,我该如何输出从上到下的文本?
出于好奇,我编写了一个小型的控制台应用程序来枚举字体并列出名称。我的 Windows Server 2003 机器上没有以 "@" 开头的字体名称。但是我的 Windows 7 机器上有几个。所有似乎都是中文字体,我在默认的 Windows 7 Ultimate 安装中没有看到任何日文字体。
LOGFONT
结构的lfEscapement
成员来定义字体的旋转:LOGFONT LogFont
LogFont.lfEscapement = 900; // 90 degreees rotated text
... // Many more initializations
HFONT newFont = CreateFontIndirect(LogFont);
SelectObject(hdc, newFont);
char tx[255];
strcpy(tx, "vertical text");
TextOut(hdc, x, y, tx, strlen(tx)); // draw a vertical font
更多信息请参阅LOGFONT结构和CreateFontIndirect函数的在线帮助。
HFONT gui_font = CreateFont( -MulDiv( 9, GetDeviceCaps( GetDC( hWnd ), LOGPIXELSY ), 72 ),
0,
900, // here
0,
FW_THIN, 0, 0, 0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, FF_MODERN | FIXED_PITCH,
L"Segoe UI" );
使用lfEscapement
(如果需要,还可以使用lfOrientation
)在许多方面优于使矩形最小宽度(例如:荷兰语单词“wij”将具有“i”和“j”相邻,因为它们的组合宽度小于“w”),或在每个字符后插入换行符。
这个库使用的方法听起来很慢,但如果你想要它,源代码似乎是提供的:
http://www.ucancode.net/faq/CDC-DrawText-Drawing-Vertical-Text.htm
您也许会发现这个讨论很有用——http://www.eggheadcafe.com/forumarchives/win32programmergdi/Aug2005/post23542233.asp——显然您需要一个垂直字体(以“@”开头),API会处理其余部分。DrawText
或DrawTextEx
吗?