使用Win32 API在C中对齐窗口文本

时间:2015-08-04 02:40:03

标签: c winapi text-alignment

我有兴趣找到一种方法来对齐以下文字:

current text

期望的结果是将每个缩写的第一个字母分配,可变的空间量和冒号排列;例如

STR :0
CON :0
DEX :0
INT :0 
...

据我所知,我可以为每一行创建两个'TextOut'调用,一个用于缩写,一个用于“:%d”,有没有办法可以用SetTextAlignment()修改hdc?

以下是我的代码的摘录:

...
TextOut(hdc, 10, 100, "STATS:", strlen("STATS:"));
TextOut(hdc, 17, 100+textYStep, "STR:0", 5);
TextOut(hdc, 17, 100+textYStep*2, "CON:0", 5);
TextOut(hdc, 17, 100+textYStep*3, "DEX:0", 5);
TextOut(hdc, 17, 100+textYStep*4, "INT:0", 5);
TextOut(hdc, 17, 100+textYStep*5, "WIS:0", 5);
TextOut(hdc, 17, 100+textYStep*6, "WIL:0", 5);
TextOut(hdc, 17, 100+textYStep*7, "CHR:0", 5);
...

1 个答案:

答案 0 :(得分:3)

您可以使用固定宽度字体,这也是本网站用于格式化代码的内容:

HFONT hfont = (HFONT)GetStockObject(ANSI_FIXED_FONT);

int textYStep = 16;
HFONT hfont = CreateFont(textYStep, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    DEFAULT_QUALITY, 0, "Courier New");
HFONT oldfont = (HFONT)SelectObject(hdc, hfont);

TextOut(hdc, 10, 100, "STATS:", strlen("STATS:"));
TextOut(hdc, 17, 100 + textYStep * 1, "STR:0", 5);
TextOut(hdc, 17, 100 + textYStep * 2, "CON:0", 5);

SelectObject(hdc, oldfont);
DeleteObject(hfont);

或者按照评论中的建议使用TabbedTextOut

int tabs[] = { 50, 100, 150, 200 };
const char *text = "X1\tX2\tX3\tX4";
TabbedTextOut(hdc, 17, 100 + textYStep, text, strlen(text), 4, tabs, 17);