使用 Win32 API 在 C 中对齐 window 文本

Aligning window text in C using Win32 API

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

期望的结果是每个缩写的第一个字母对齐,可变数量 space,冒号对齐;例如

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);
...

你可以使用等宽字体,这也是本网站用来格式化代码的:

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);