使用 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);
我有兴趣找到一种对齐以下文本的方法:
期望的结果是每个缩写的第一个字母对齐,可变数量 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);